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

如何基于现有DataFrame的月份区间生成单月分行的新DataFrame

Pandas实现订单区间按月拆分方案

实现逻辑

  • 先将Order valid from和Order valid to两列转换为Pandas可识别的日期格式
  • 对每一行生成从起始月份到结束月份的所有月份序列,格式保持%b-%y和原始数据一致
  • 将生成的月份序列拆分为单独行,保留原有的客户ID、订单数量字段,调整列名即可得到目标结果

完整实现代码

import pandas as pd

# 构造测试数据,可替换为你实际读取的数据源
df = pd.DataFrame({
    'Customer ID': ['Customer 1', 'Customer 2'],
    'Order quantity': [20, 50],
    'Order valid from': ['Aug-21', 'Oct-21'],
    'Order valid to': ['Dec-21', 'Jan-22']
})

# 转换起止月份为日期格式,统一取每月第一天
df['valid_from_dt'] = pd.to_datetime(df['Order valid from'], format='%b-%y')
df['valid_to_dt'] = pd.to_datetime(df['Order valid to'], format='%b-%y')

# 按行生成区间内的所有月份列表
def get_month_range(row):
    month_series = pd.date_range(start=row['valid_from_dt'], end=row['valid_to_dt'], freq='MS')
    return [dt.strftime('%b-%y') for dt in month_series]

df['Month'] = df.apply(get_month_range, axis=1)

# 拆分月份列表为单独行,调整列名和顺序匹配输出要求
result = df.explode('Month')[['Customer ID', 'Month', 'Order quantity']]
result = result.rename(columns={'Customer ID': 'Customer'})

# 输出结果
print(result)

运行后输出结果和你预期的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:02