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

Python:无共同索引的两个DataFrame占比与累计占比计算

解决方案

不需要依赖共同索引,直接提取df1的总计值即可完成计算,代码如下:

import pandas as pd

# 示例数据
df1 = pd.DataFrame({'a': [1875]})
df2 = pd.DataFrame({'b': ['aaa', 'bbb', 'ccc', 'ddd'], 'c': [125, 250, 500, 1000]})

# 提取df1的总计值
total = df1['a'].iloc[0]

# 计算Outcome 1:每行数值占df1总计的百分比
df2['Outcome 1'] = (df2['c'] / total * 100).round(2).astype(str) + '%'

# 计算Outcome 2:当前行及后续行的累计占比
# 先倒序计算累计占比,再反转回原顺序
cumulative_ratios = (df2['c'] / total * 100).iloc[::-1].cumsum().iloc[::-1].round(2)
df2['Outcome 2'] = cumulative_ratios.astype(str) + '%'

print(df2)

输出结果:

b     c Outcome 1 Outcome 2
0  aaa   125     6.67%    100.00%
1  bbb   250    13.33%     93.33%
2  ccc   500    26.67%     80.00%
3  ddd  1000    53.33%     53.33%

关键说明:

  • 无需合并两个DataFrame:df1本质就是一个单独的总计数值,直接提取即可,完全不需要索引匹配。
  • Outcome 2的计算逻辑:先把占比倒序,用cumsum()计算从最后一行开始的累计值,再反转回原顺序,得到当前行到最后一行的累计占比,与需求结果一致。
  • 格式处理:用round(2)保留两位小数,转成字符串后加%符号,匹配期望输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:55:13