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

如何用Python基于起止日期列插入DataFrame数据行?

解决方案:展开促销周期内的所有月份行

步骤说明

  1. 转换日期格式:将start_date和end_date的YYYYMM数字格式转为datetime类型,便于生成连续月份序列。
  2. 生成月度序列:对每一行数据,生成从start_date到end_date之间的所有月份(包含起止月)。
  3. 展开多行并保留属性:将生成的月度序列拆分为单独行,同时复制原行的item、promotion_type、promotion_desc属性。
  4. 还原日期格式:将生成的datetime月份转回YYYYMM数字格式,匹配期望输出。

完整代码实现

import pandas as pd

# 原数据(修正拼写错误:promotin_type → promotion_type)
sales_dict = {}
sales_dict['item'] = ['100179K', '100086K']
sales_dict['start_date'] = [201703, 201801]
sales_dict['end_date'] = [201707, 201802]
sales_dict['promotion_type'] = [1, 0]
sales_dict['promotion_desc'] = [0, 1]
df = pd.DataFrame.from_dict(sales_dict)

# 1. 转换日期列为datetime类型
df['start_date'] = pd.to_datetime(df['start_date'], format='%Y%m')
df['end_date'] = pd.to_datetime(df['end_date'], format='%Y%m')

# 2. 为每一行生成包含所有月份的列表
df['month_sequence'] = df.apply(
    lambda row: pd.date_range(start=row['start_date'], end=row['end_date'], freq='MS').tolist(),
    axis=1
)

# 3. 展开月度序列为多行,同时保留其他属性
expanded_df = df.explode('month_sequence').drop(columns=['start_date', 'end_date'])

# 4. 将datetime月份转回YYYYMM数字格式,并重命名为start_date
expanded_df['start_date'] = expanded_df['month_sequence'].dt.strftime('%Y%m').astype(int)
expanded_df = expanded_df.drop(columns=['month_sequence'])[['item', 'start_date', 'promotion_type', 'promotion_desc']]

print(expanded_df)

输出结果

item  start_date  promotion_type  promotion_desc
0  100179K       201703               1               0
0  100179K       201704               1               0
0  100179K       201705               1               0
0  100179K       201706               1               0
0  100179K       201707               1               0
1  100086K       201801               0               1
1  100086K       201802               0               1

关键细节说明

  • pd.date_range(..., freq='MS'):MS表示每个月的第一天,确保生成的是每个月的起始日期,转换为YYYYMM时不会出错。
  • explode():将列表类型的列拆分为多行,自动复制其他列的对应值,完美解决“一行转多行”的需求。
  • 修正了原数据中的列名拼写错误promotin_type为promotion_type,避免后续操作报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:05:21