在 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/