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

Python DataFrame新增value_%列 实现Band分组批量计算

问题:为长格式DataFrame批量添加占比列

需求

已将宽格式数据转换为长格式DataFrame,需要为所有Band类型批量新增value_%列,计算逻辑为:
value_% = (当前行value值 / 对应Date的所有value总和) * 100

当前数据样例

Date         Band       value         
 03:Q1        <620       72.12               
 03:Q2        <620       71.41         
 03:Q3        <620       78.15        
 03:Q4        <620       90.06 

期望结果样例

Date      Band   value   value_%                
 03:Q1    <620    72.12     7.34                              
 03:Q2    <620    71.41     7.04                
 03:Q3    <620    78.15     7.35                  
 03:Q4    <620    90.06     8.76 

已执行的长格式转换代码

df = pd.read_csv('https://raw.githubusercontent.com/GeorgeRobbin/GeorgeRobbin.github.io/main/Credit_Score.csv')
df = pd.melt(df, id_vars=["Date"], var_name=("Band"))  # 注:原代码中的df3应为笔误,修正为df

解决方案

使用groupby结合transform方法,按Date分组计算总和,再逐行计算占比:

# 计算每个日期对应的总value,生成与原DataFrame同长度的Series
total_by_date = df.groupby('Date')['value'].transform('sum')
# 新增value_%列并保留两位小数
df['value_%'] = (df['value'] / total_by_date * 100).round(2)

关键说明

  • groupby('Date')['value'].transform('sum')会对每个日期的所有value求和,然后将结果广播到该日期的每一行,保证每行都能匹配到对应日期的总和
  • round(2)用于将占比结果保留两位小数,与示例格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:50