【问题标题】:How to calculate total sales per client? Python如何计算每个客户的总销售额? Python
【发布时间】: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


【解决方案1】:
df['TotalSales'] = df['Sales'].groupby(df['ClientId']).transform('sum')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多