自定义 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)
比较 flag
和 Y
,按 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
我有以下数据框:
我想按 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)
比较 flag
和 Y
,按 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