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
相关产品推荐
相关产品推荐

