You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多层索引下如何计算每日各分类Price(USD)占当日总额百分比

解决方案

你已经完成了「日期+分类」维度的金额聚合,只需要基于日期维度计算单日总金额,再做逐行比值即可,两种可直接运行的实现方式如下:

方式一:单步聚合同时计算占比(推荐)

不需要先生成多层索引的聚合结果,直接在分组时同步计算占比,逻辑更简洁:

# 先聚合得到每个日期下各分类的总金额
df_agg = df.groupby(["Timestamp", "Category"], as_index=False)["Price(USD)"].sum()
# 按日期分组,用transform匹配每行对应日期的总金额,直接计算占比
df_agg["Percentage"] = df_agg["Price(USD)"] / df_agg.groupby("Timestamp")["Price(USD)"].transform("sum")

如果你需要保留多层索引结构,删除as_index=False参数即可,计算逻辑不受影响。

方式二:基于现有多层索引结果计算

如果你已经生成了多层索引的聚合结果df3,不需要重置索引,直接按索引的Timestamp层级分组计算即可:

# level=0对应多层索引中的Timestamp层级,除法会自动按索引匹配日期总金额
df3["Percentage"] = df3["Price(USD)"] / df3.groupby(level=0)["Price(USD)"].sum()

计算规则匹配说明

以你给出的示例数值验证:
同一日期下三个分类金额为0.3、0.2、0.1,当日总金额为0.3+0.2+0.1=0.6,运行代码后三个分类的占比分别为0.3/0.6=0.5、0.2/0.6≈0.333、0.1/0.6≈0.167,完全符合预期计算逻辑。

提示:如果数据中存在单日总金额为0的异常情况,上述计算会触发除零警告,可以提前过滤金额为0的记录,或者用div方法设置异常填充值。

内容的提问来源于stack exchange,提问作者Crimson_91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:42:17