python - 在数据框中对一列进行求和,同时保留其他列

标签 python pandas group-by sum

在 pandas Dataframe df 中,我有这样的列:

    NAME    KEYWORD  AMOUNT  INFO
0   orange  fruit    13      from italy
1   potato  veggie   7       from germany
2   potato  veggie   9       from germany
3   orange  fruit    8       from italy
4   potato  veggie   6       from germany

执行 groupby KEYWORD 操作时,我想计算每组 AMOUNT 值的总和并始终将第一个值与其他列保持一致,结果为:

    NAME    KEYWORD  AMOUNT  INFO
0   orange  fruit    21      from italy
1   potato  veggie   22      from germany

我试过了

df.groupby('KEYWORD).sum()

但这对所有列进行了“总结”,即我得到

    NAME                KEYWORD  AMOUNT  INFO
0   orangeorange        fruit    21      from italyfrom italy
1   potatopotatopotato  veggie   22      from germanyfrom germanyfrom germany

然后我尝试对不同的列使用不同的函数:

df.groupby('KEYWORD).agg({'AMOUNT': sum, 'NAME': first, ....})

def first(f_arg, *args):
    return f_arg

但是不幸的是,这给了我一个“ValueError:函数不会减少”错误。

所以我有点不知所措。如何仅将 sum 应用于 AMOUNT 列,同时保留其他列?

最佳答案

使用groupby + agg使用自定义 aggfunc 字典。

f = dict.fromkeys(df.columns.difference(['KEYWORD']), 'first')
f['AMOUNT'] = sum

df = df.groupby('KEYWORD', as_index=False).agg(f)
df

  KEYWORD    NAME  AMOUNT          INFO
0   fruit  orange      21    from italy
1  veggie  potato      22  from germany

dict.fromkeys 为我提供了一种将其推广到 N 列的好方法。如果列顺序很重要,请添加 reindex最后的操作:

df = df.groupby('KEYWORD', as_index=False).agg(f).reindex(columns=df.columns)
df

     NAME KEYWORD  AMOUNT          INFO
0  orange   fruit      21    from italy
1  potato  veggie      22  from germany

关于python - 在数据框中对一列进行求和,同时保留其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48761261/

相关文章:

Python pandas 数据框根据条件分组

MYSQL 查询 LEFT JOIN 和 GROUP BY

python - 值错误 : can only call with other PeriodIndex-ed objects

python - 创建自定义用户注册表单 Django

Python pandas 线性回归 groupby

python - 要么对数值进行操作,要么用 nan 替换单元格

python - 如何对具有非数值的数据框进行分组和透视

python - 谷歌colab错误 - 无法打开任何内容

python - 即使使用 .loc 后也出现设置与复制警告错误

python - Pandas read_csv() 给出 DtypeWarning