Luc*_*esl 4 python group-by dataframe pandas pandas-groupby
从以下数据框中,我尝试添加一个新列,条件是每次id
检查最大值。然后将每个的每一行的最大值id
放在新列中。
df
id value
1 0
1 0
1 0
2 0
2 1
3 1
3 1
Run Code Online (Sandbox Code Playgroud)
预期结果:
id value new_column
1 0 0
1 0 0
1 0 0
2 0 1
2 1 1
3 1 1
3 1 1
Run Code Online (Sandbox Code Playgroud)
我试过了:
df['new_column'] = df.groupby(['id'])['value'].idxmax()
Run Code Online (Sandbox Code Playgroud)
或者:
df['new_column'] = df.groupby(['id'])['value'].max()
Run Code Online (Sandbox Code Playgroud)
但这些都没有给出想要的结果。
您需要为此使用transform
:
df['new_column'] = df.groupby(['id'])['value'].transform('max')
Run Code Online (Sandbox Code Playgroud)
这更简洁地复制了以下内容:
df['new_column'] = df['id'].map(df.groupby(['id'])['value'].max())
Run Code Online (Sandbox Code Playgroud)
请记住,groupby
操作的结果是一个索引设置为 grouper 列的系列。
由于原始数据框和groupby
对象之间的索引未对齐,因此分配不会自动发生。