gpt4 book ai didi

python - Pandas 数据框按两列分组,计数和求和

转载 作者:行者123 更新时间:2023-12-04 01:16:03 25 4
gpt4 key购买 nike

我有以下 df,我想按“名称”对其进行分组,因此有一个“A”和“B”计数列以及一个“总销售额”总和列:

例如转动这个:

data = {'A or B' : ['A','A','B','B','A','B'],
'Name' : ['Ben','Ben','Ben','Sam','Sam','Sam'],
'Sales ($)' : [10,5,2,5,6,7]
}

df=pd.DataFrame(data, columns = ['A or B','Name','Sales ($)'])

看起来像这样:

grouped_data = {'A' : [2,1],
'B' : [1,2],
'Name' : ['Ben','Sam'],
'Total Sales ($)' : [17,18]
}

df=pd.DataFrame(grouped_data, columns = ['A','B','Name','Total Sales ($)'])

最佳答案

您可以尝试使用 pd.get_dummiesjoingroupby+sum:

pd.get_dummies(df['A or B'])\
.join(df.drop('A or B',1))\
.groupby('Name',as_index=False).sum()

输出:

  Name  A  B  Sales ($)
0 Ben 2 1 17
1 Sam 1 2 18

详细信息:

首先,使用get_dummies 将分类变量转化为虚拟/指标变量:

pd.get_dummies(df['A or B'])
# A B
#0 1 0
#1 1 0
#2 0 1
#3 0 1
#4 1 0
#5 0 1

然后使用 join,将带有原始 df 的虚拟对象与 'A or B' 列丢弃:

pd.get_dummies(df['A or B']).join(df.drop('A or B',1))
# A B Name Sales ($)
#0 1 0 Ben 10
#1 1 0 Ben 5
#2 0 1 Ben 2
#3 0 1 Sam 5
#4 1 0 Sam 6
#5 0 1 Sam 7

最后,根据名称执行groupby+sum:

pd.get_dummies(df['A or B']).join(df.drop('A or B',1)).groupby('Name',as_index=False).sum()
# Name A B Sales ($)
#0 Ben 2 1 17
#1 Sam 1 2 18

关于python - Pandas 数据框按两列分组,计数和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63344365/

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