数据框小计和百分比

Posted

技术标签:

【中文标题】数据框小计和百分比【英文标题】:dataframe subtotal and percent 【发布时间】:2020-12-27 07:24:53 【问题描述】:

我有一个如下所示的数据框:

我的最终目标是计算每个目的和每个来源的百分比

所以决赛桌应该是这样的:

任何帮助或指导将不胜感激:)

提前致谢:)

【问题讨论】:

不要发布图片,发布可以剪切'n'粘贴的数据。 【参考方案1】:

使用transform 获得您所需要的。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html.

即使aggregation 返回输入数据的简化版本transform 最好的一点是返回的输出与输入的形状相同:

df['%_values'] = 100 * (df['values'] / (df.groupby('Origin')['values'].transform('sum')))

上面的 1-liner 将 每个值除以值的分组总和(按原点分组),然后在新列中返回结果。

它会打印你:

  Origin Destination     Purpose  values   %_values
0      a           a    business    1490  37.664307
1      a           b    business    1301  32.886754
2      a           c    pleasure    1165  29.448938
3      b           a    pleasure    1777  57.064868
4      b           b    business     580  18.625562
5      b           c    pleasure     757  24.309570
6      c           a    business    1852  41.599281
7      c           b    pleasure    1949  43.778077
8      c           c  undeclared     651  14.622642

当然,要获得 0(或任何)小数位的输出,您可以使用 round:

df['%_values'] = round(100 * (df['values'] / (df.groupby('Origin')['values'].transform('sum'))))

  Origin Destination     Purpose  values  %_values
0      a           a    business    1490      38.0
1      a           b    business    1301      33.0
2      a           c    pleasure    1165      29.0
3      b           a    pleasure    1777      57.0
4      b           b    business     580      19.0
5      b           c    pleasure     757      24.0
6      c           a    business    1852      42.0
7      c           b    pleasure    1949      44.0
8      c           c  undeclared     651      15.0

【讨论】:

以上是关于数据框小计和百分比的主要内容,如果未能解决你的问题,请参考以下文章

eharts 各类图形小计

Spotfire - 查找小计的百分比

s-s-rS/RDLC 计算表达式的小计

WooCommerce 结帐单选按钮,可根据特定项目小计设置百分比费用

如何为所有交易添加基于百分比的附加费(加上附加税)

带有表达式的 s-s-rS 小计列