【问题标题】:Create new column with max value with groupby使用 groupby 创建具有最大值的新列
【发布时间】:2018-09-10 12:35:30
【问题描述】:

从以下数据框中,我尝试添加一个新列,条件是每个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')

标签: python pandas dataframe group-by pandas-groupby


【解决方案1】:

您需要为此使用transform

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

这更简洁地复制了以下内容:

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

请记住,groupby 操作的结果是索引设置为 grouper 列的系列。

由于您的原始数据框和groupby对象之间的索引未对齐,因此不会自动进行分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2019-02-07
    • 2021-11-30
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多