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

Python DataFrame动态按日/月计算百分比列的技术问询

Python DataFrame 动态分组计算百分比列

已实现的计算逻辑

现有DataFrame已完成以下两列百分比计算:

  • FirstCol:仅针对Result为Good的行,计算该行Vol占所有Good行Vol总和的比例
    df['FirstCol'] = np.where(df['Result'].isin(['Good']),df['Vol']/df[df['Result']=='Good']['Vol'].sum(),0) 
    
  • SecondCol:计算每行Vol占全表Vol总和的比例
    df['SecondCol'] = df['Vol']/df['Vol'].sum()
    

需要新增的动态计算需求

需动态实现以下两列,无需手动指定月份参数:

  • 第三列:按Month分组,计算每行Vol对应月份总Vol的百分比
  • 第四列:按Day+Month组合分组,计算每行Vol对应组总Vol的百分比

解决方案代码

利用pandas的groupby+transform方法实现动态分组计算,代码如下:

import pandas as pd
import numpy as np

# 第三列:按Month分组计算占比
df['Third Col (Month)'] = df['Vol'] / df.groupby('Month')['Vol'].transform('sum')

# 第四列:按Day和Month组合分组计算占比
df['Forth Col (Day+Month)'] = df['Vol'] / df.groupby(['Day', 'Month'])['Vol'].transform('sum')

# 可选:将所有百分比列格式化为带%的整数格式(匹配示例输出)
df[['FirstCol', 'SecondCol', 'Third Col (Month)', 'Forth Col (Day+Month)']] = (
    df[['FirstCol', 'SecondCol', 'Third Col (Month)', 'Forth Col (Day+Month)']]
    .mul(100)
    .round(0)
    .astype(int)
    .astype(str) + '%'
)

代码说明

  • groupby('Month')['Vol'].transform('sum')会自动识别数据中所有Month分组,计算每个分组的Vol总和,并将结果对应到原DataFrame的每一行,完全动态适配数据变化
  • 格式化步骤将小数比例转换为整数百分比字符串,与示例输出格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:12:50