私にとってもう1つの難しい質問ですが、おそらくあなたにとっては簡単な質問です。私はただpythonyの方法で考える方法を知りません。
私はデータフレームを持っています:
dt={'Name':['A','A','B','B','C','D','D'],'FG':['N','Y','N','Y','N','N','N'], 'Date':[2016,2017,2017,2016,2017,2017,2017]}
df = pd.DataFrame(data = dt、columns = ['Name'、 'FG'、 'Date'])
私がやりたいのは、「名前」(繰り返し可能)の各名前について、「FG」のフラグ値が「Y」に設定されていて、それに関連付けられている日付が関連付けられている日付よりも大きいかどうかを確認することです。 「N」エントリを保持します。それ以外の場合は削除します。経験不足のため、このコードを書く方法を本当に考えることはできません。ここで視覚化することは私が持っているものです
Name FG Date
A N 2016
A Y 2017
B N 2017
B Y 2016
C Y 2017
D N 2017
D N 2017
これが私が返したいものです
Name FG Date
A Y 2017
C Y 2017
ヒープみんなありがとう
もう1つの列を追加max
して、グループ内の値を復元します。
df['check']=df.groupby('Name').Date.transform('max')
df.loc[(df.check==df.Date)&(df.FG=='Y'),:]
Out[786]:
Name FG Date check
1 A Y 2017 2017
4 C Y 2017 2017
編集:
mask=df.groupby('Name').\
apply(lambda x : (x.FG=='Y')&(x.Date>min(x.Date)) if len(x.Date)>1 else (x.FG=='Y')).values
df[mask]
Out[808]:
Name FG Date
1 A Y 2017
4 C Y 2017
データ入力
df
Out[809]:
Name FG Date
0 A N 2016
1 A Y 2017
2 B N 2017
3 B Y 2016
4 C Y 2017
5 D N 2017
6 D N 2017
7 E Y 2017
8 E N 2017
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加