根据另一列中的子组值之和在Pandas中添加一列[重复]

yzckvree  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(126)
    • 此问题在此处已有答案**:

How do I create a new column from the output of pandas groupby().sum()?(4个答案)
6天前关闭。
下面是我的数据框的简化版本(数据框中的人数远远超过3):

df = pd.DataFrame({'Person':['John','David','Mary','John','David','Mary'],
               'Sales':[10,15,20,11,12,18],
               })
Person  Sales
0   John     10
1  David     15
2   Mary     20
3   John     11
4  David     12
5   Mary     18

我想在此数据框中添加一列"Total",这是人均总销售额的总和

Person  Sales  Total
0   John     10     21
1  David     15     27
2   Mary     20     38
3   John     11     21
4  David     12     27
5   Mary     18     38

实现这一目标最简单的方法是什么?
我试过了

df.groupby('Person').sum()

但是输出的形状与df的形状不一致。

Sales
Person       
David      27
John       21
Mary       38
ssm49v7z

ssm49v7z1#

我们需要的是transform方法,它可以对每个组应用一个函数:

df['Total'] = df.groupby('Person')['Sales'].transform(sum)

它给出了预期结果:

Person  Sales  Total
0   John     10     21
1  David     15     27
2   Mary     20     38
3   John     11     21
4  David     12     27
5   Mary     18     38
irtuqstp

irtuqstp2#

实现这一点最简单的方法是使用pandas groupby和sum函数。

df['Total'] = df.groupby('Person')['Sales'].sum()

这将在数据框中添加一列,其中包含每人的总销售额。

ni65a41a

ni65a41a3#

数据框中的“人员”列包含重复值
不可能通过groupby将新列应用于此
我建议根据销售额制作一个新的数据框
下面的代码将帮助您实现这一点

newDf = pd.DataFrame(df.groupby('Person')['Sales'].sum()).reset_index()

这将创建一个新的数据框,列为“Person”和“sales”。

相关问题