python - 计算每个类别的贡献

标签 python pandas

我有一个数据集。

  Sales Channel         Year_Month  Total Cost
   Offline              Jul-2017    100
    Online              Jul-2017    200
    Offline              Aug-2017    300
    Online              Aug-2017    400
    Online              Sep-2017    200
    Online              Oct-2017    300
    Online              Nov-2017    100
    Offline              Nov-2017    3200
    Online              Dec-2017    500

我想根据 year_month 找到每个类别的百分比贡献。 year_month Jul-2017 示例 离线百分比为 100/(100 + 200) 在线百分比为 200(100 + 200)

所以输出应该是这样的:

Sales Channel           Year_Month    Total Cost  Percentage
    Offline              Jul-2017    100          33.33%
    Online              Jul-2017    200           66.67%
    Offline              Aug-2017    300           60%
    Online              Aug-2017    200            40%
    Online              Sep-2017    200           100%
    Online              Oct-2017    300           100%
    Online              Nov-2017    100           20%
    Offline              Nov-2017    400           80%
    Online              Dec-2017    500           100% 

我尝试遍历 year_month 然后计算每个类别。但是,它没有成功。

我有什么办法可以做到这一点。如果不用for循环也能搞定就好了

最佳答案

如果每个 Year_Month 有唯一的 Sales Channel 除以由 GroupBy.transform 创建的 Series总和:

s = df.groupby('Year_Month')['Total Cost'].transform('sum')
df['Percentage'] = df['Total Cost'].div(s).mul(100)
print (df)
  Sales Channel Year_Month  Total Cost  Percentage
0       Offline   Jul-2017         100   33.333333
1        Online   Jul-2017         200   66.666667
2       Offline   Aug-2017         300   42.857143
3        Online   Aug-2017         400   57.142857
4        Online   Sep-2017         200  100.000000
5        Online   Oct-2017         300  100.000000
6        Online   Nov-2017         100    3.030303
7       Offline   Nov-2017        3200   96.969697
8        Online   Dec-2017         500  100.000000

另一种解决方案,如果 DataFrame 较大且组数较多,则速度较慢:

df['Percentage'] = df.groupby('Year_Month')['Total Cost'].apply(lambda x: x / x.sum()) * 100

关于python - 计算每个类别的贡献,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237772/

相关文章:

python - 如何在 Astropy 中指定 LaTeX 输出格式

Python 和 RFC 3339 时间戳

python - 迭代数据框并检查日期

python - 迭代不同的数据框

Pandas - 将具有开始和结束日期的数据帧转换为每日数据

python - Pandas DataFrame列的KeyError异常

python - tensorflow word2vec 基本输入输出占位符

python - 将大文件从 .zip 存档写入 Pandas 数据帧

奇数的Python逻辑测试

python - Pandas groupby 和减去行