如何基于现有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
相关产品推荐
相关产品推荐

