条件を満たす行だけを保持

Keeping only the rows that satisfies a condition with respect to an another column – StackOverflow

単純に「全ての年があるか」を調べたい場合は,ユニーク数をみるのがリーズナブル.

import io
import pandas as pd


strings = """Name     Year      Label

Jeff     2018        0
Jeff     2019        1
Matt     2018        0
John     2018        0
Mary     2018        1
Mary     2019        1"""
df = pd.read_csv(io.StringIO(strings), sep='\s+')
print(df)

v = df.groupby('Name')['Year'].nunique().eq(2)
names, ncond = v.index.values, v.values
cond = df['Name'].isin(names[ncond])
print(df[cond])
   Name  Year  Label
0  Jeff  2018      0
1  Jeff  2019      1
2  Matt  2018      0
3  John  2018      0
4  Mary  2018      1
5  Mary  2019      1
   Name  Year  Label
0  Jeff  2018      0
1  Jeff  2019      1
4  Mary  2018      1
5  Mary  2019      1

「任意の年があるか」であれば,nuniqueではなく,「df.groupby(‘Name’)[‘Year’].unique().apply(lambda x: (x==[2018, 2019]).all())」に置き換えれば良い.というか,nuniqueよりもuniqueの方が効率が良いので,その方がリーズナブルか.

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください