自定义 groupby 函数 pandas python

custom groupby function pandas python

我有以下数据框:

我想按 id 分组并添加一个包含 Y 的标志列,如果任何时候 Y 发生在 id 上,结果 DF 想要以下内容:

这是我的方法,太费时且不确定正确性:

temp=pd.DataFrame()
j='flag'
for i in df['id'].unique():
  test=df[df['id']==i]
  test[j]=np.where(np.any((test[j]=='Y')),'Y',test[j])
temp=temp.append(test)

比较 flagY,按 id 分组,然后使用 any:

new_df = (df['flag'] == 'Y').groupby(df['id']).any().map({True:'Y', False:'N'}).reset_index()

输出:

>>> new_df
   id flag
0   1    Y
1   2    Y
2   3    N
3   4    N
4   5    Y

你可以做到 groupby + max 因为 Y > N:

df.groupby('id', as_index=False)['flag'].max()

   id flag
0   1    Y
1   2    Y
2   3    N
3   4    N
4   5    Y