gpt4 book ai didi

pandas - 如何按另一列上的值聚合一列?

转载 作者:行者123 更新时间:2023-12-04 11:47:30 24 4
gpt4 key购买 nike

假设我有以下 df.

df = pd.DataFrame({
'A':['x','y','x','y'],
'B':['a','b','a','b'],
'C':[1,10,100,1000],
'D':['w','v','v','w']
})

A B C D
0 x a 1 w
1 y b 10 v
2 x a 100 v
3 y b 1000 w

我想按 A 列和 B 列分组,对 C 列求和,并保留 D 中的值,即 C 的最大组值的同一行。像这样:
A   B   C      D
x a 101 v
y b 1010 w

到目前为止,我有这个:
df.groupby(['A','B']).agg({'C':sum})

A B C
x a 101
y b 1010

我必须用什么函数来聚合列 D?

最佳答案

您可以使用 DataFrameGroupBy.idxmax 对于 C 的最大值的索引与 loc :

#unique index
df.reset_index(drop=True, inplace=True)
df1 = df.groupby(['A','B'])['C'].agg(['sum', 'idxmax'])
df1['idxmax'] = df.loc[df1['idxmax'], 'D'].values
df1 = df1.rename(columns={'idxmax':'D','sum':'C'}).reset_index()

map 类似的解决方案:
df1 = df.groupby(['A','B'])['C'].agg(['sum', 'idxmax']).reset_index()
df1['idxmax'] = df1['idxmax'].map(df['D'])
df1 = df1.rename(columns={'idxmax':'D','sum':'C'})
print (df1)
A B C D
0 x a 101 v
1 y b 1010 w

关于pandas - 如何按另一列上的值聚合一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com