【发布时间】:2020-12-16 00:58:38
【问题描述】:
我正在尝试创建一个列来显示每个“ClientId”的总销售额。
一个客户可以在我的数据集中出现多次,因此我希望每个客户的新列中的 TotalSales 值始终相同。
我尝试通过 2 种不同的方式进行分组,但输出不正确,我不确定为什么,这应该是一个简单的计算 这是我尝试过的:
df['TotalSales'] = df.groupby('ClientId')['Sales'].apply(lambda x: x.astype(int) / x.astype(int).sum())
df['TotalSales'] = df.groupby('ClientId')['Sales'].sum().reset_index()
样本数据集
dataset = {'ClientId': [10,20,20,20,10,5,3,7,5,20,12,5,3,20,5,8,10,9,7,20,21,5,3,10],
'Sales': [100,50,25,30,40,50,200,600,20,40,100,20,50,400,250,300,125,75,90,10,225,550,450,55]}
df = pd.DataFrame(data=dataset)
有人知道我该如何解决这个问题吗?
提前感谢您的帮助!
【问题讨论】:
-
df['TotalSales'] = df.groupby('ClientId')['Sales'].transform('sum'). -
Killi,您正在分组,因此您的输出 nr 行与数据帧 df 的 nr 行不匹配。
-
顺便说一句,如果你想要平均值,你可以这样做: series = df.groupby('ClientId')['Sales'].apply(np.mean) 和 --> import numpy 作为 np
-
啊,原来如此!谢谢!我不知道
transform
标签: python pandas pandas-groupby