按组创建新列,该列包含每个组中的最大值

4

从下面的数据框中,我想添加一个新列,条件是对于每个id检查最大值。然后将每个id的每行的最大值放在新列中。

df

id  value
1   0
1   0
1   0
2   0
2   1
3   1
3   1

预期结果:

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

我已经尝试过:
df['new_column'] = df.groupby(['id'])['value'].idxmax()

或者:

df['new_column'] = df.groupby(['id'])['value'].max()

但是这两种方法都不能得到期望的结果。

尝试使用以下代码:gb = df.groupby(['id'])['value'].reset_index()df =df.merge(gb, on=['id'], how='left') - czr
1个回答

6
您需要使用transform来实现此功能:
df['new_column'] = df.groupby(['id'])['value'].transform('max')

这更简洁地复制了以下内容:
df['new_column'] = df['id'].map(df.groupby(['id'])['value'].max())

请记住,groupby 操作的结果是一个系列,其索引设置为分组列。

由于您的 原始 数据帧和 groupby 对象之间的索引未对齐,因此赋值不会自动发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接