使用 groupby 创建具有最大值的新列

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)

但这些都没有给出想要的结果。

jpp*_*jpp 6

您需要为此使用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对象之间的索引未对齐,因此分配不会自动发生。