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

如何为Type 0数据生成mon_pct列:基于Type1月度总量计算占比

实现方法

假设你使用Pandas处理这份数据,可按以下步骤完成需求:

  1. 提取月份标识
    从Day列的YYYYMMDD格式中提取月份信息,可通过截取字符串前6位实现:

    import pandas as pd
    
    # 假设数据存储在df中
    df['Month'] = df['Day'].astype(str).str[:6]  # 生成如'202301'的月份标记
    
  2. 计算各月Type1的Volume总和
    按月份分组,筛选Type=1的数据并求和:

    type1_month_sum = df[df['Type'] == 1].groupby('Month')['Volume'].sum().reset_index()
    type1_month_sum.rename(columns={'Volume': 'Type1_Month_Total'}, inplace=True)
    
  3. 合并数据并计算mon_pct
    将月度总和合并回原数据,仅为Type=0的行计算百分比:

    df = df.merge(type1_month_sum, on='Month', how='left')
    df['mon_pct'] = df.apply(
        lambda row: (row['Volume'] / row['Type1_Month_Total']) * 100 if row['Type'] == 0 else None,
        axis=1
    )
    # 无需保留Month列时可删除
    df.drop('Month', axis=1, inplace=True)
    

更高效的简化写法

用transform方法跳过合并步骤,直接匹配对应月份的Type1总和:

df['Month'] = df['Day'].astype(str).str[:6]
# 为每行匹配对应月份的Type1总和
df['Type1_Month_Total'] = df.groupby('Month')['Volume'].transform(
    lambda x: x[df.loc[x.index, 'Type'] == 1].sum()
)
# 仅Type=0的行计算百分比,其余留空
df['mon_pct'] = df.where(df['Type'] == 0, None)['Volume'] / df['Type1_Month_Total'] * 100
# 清理临时列
df.drop(['Month', 'Type1_Month_Total'], axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:22:15