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

如何用优雅高效的Pandas代码拆分季度营收至月度并重塑DataFrame

高效实现Pandas季度营收拆分并重塑为月度数据

原始DataFrame

import pandas as pd
df1 = pd.DataFrame({
    's_id': [18,23],
    'SUB':['Phy','Phy'],
    'Rev_Q1':[80,100],
    'Rev_Q2':[60,50],
    'Rev_Q3':[20,12],
    'Rev_Q4':[10,12]
})

需求

  • 将每个季度的营收等额拆分到该季度的3个月份中(例如s_id=18的Rev_Q1值80,除以3后得到26.667,分配给1、2、3月)
  • 将数据重塑为月度列转成行的格式

优雅高效实现方案

通过Pandas原生方法组合完成,避免冗余手动操作:

# 1. 把季度营收列转成长表,保留s_id和SUB作为标识列
melted = df1.melt(id_vars=['s_id', 'SUB'], var_name='Quarter', value_name='Rev')

# 2. 提取季度数字,生成对应季度的3个月份列表
melted['Quarter_num'] = melted['Quarter'].str.extract('Q(\d+)').astype(int)
melted['Month'] = melted['Quarter_num'].apply(lambda x: list(range(3*x-2, 3*x+1)))

# 3. 扩展行拆分月份,同时计算月度营收
result = melted.explode('Month').assign(Rev_Month=lambda x: x['Rev']/3).round(3)

# 4. 整理列顺序并排序
result = result[['s_id', 'SUB', 'Month', 'Rev_Month']].sort_values(['s_id', 'Month']).reset_index(drop=True)

输出结果示例

s_id  SUB  Month  Rev_Month
0     18  Phy      1      26.667
1     18  Phy      2      26.667
2     18  Phy      3      26.667
3     18  Phy      4      20.000
4     18  Phy      5      20.000
5     18  Phy      6      20.000
6     18  Phy      7       6.667
7     18  Phy      8       6.667
8     18  Phy      9       6.667
9     18  Phy     10       3.333
10    18  Phy     11       3.333
11    18  Phy     12       3.333
12    23  Phy      1      33.333
13    23  Phy      2      33.333
14    23  Phy      3      33.333
15    23  Phy      4      16.667
16    23  Phy      5      16.667
17    23  Phy      6      16.667
18    23  Phy      7       4.000
19    23  Phy      8       4.000
20    23  Phy      9       4.000
21    23  Phy     10       4.000
22    23  Phy     11       4.000
23    23  Phy     12       4.000

方案优势

  • 全程使用Pandas原生方法,无需手动创建冗余列,代码简洁易维护
  • melt+explode组合高效完成宽表转长表+行扩展操作
  • 逻辑分层清晰,每一步对应需求环节,可读性强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28