如何在Pandas DataFrame中展开时间区间得到单日逐行数据?
解决方案
最简单的实现方式是借助date_range生成区间内的逐日序列,再用explode展开行,全程3行代码即可完成:
完整实现代码
import pandas as pd # 原始数据 df1 = pd.DataFrame( [['2011-01-01','2011-01-03','A'], ['2011-04-01','2011-04-01','A'], ['2012-08-28','2012-08-30','B'], ['2015-04-03','2015-04-05','A'], ['2015-08-21','2015-08-21','B']], columns=['d0', 'd1', 'event']) # 步骤1:将日期列转换为datetime类型 df1[['d0', 'd1']] = df1[['d0', 'd1']].apply(pd.to_datetime) # 步骤2:为每一行生成d0到d1的逐日日期序列 df1['Date'] = df1.apply(lambda x: pd.date_range(start=x['d0'], end=x['d1'], freq='D'), axis=1) # 步骤3:展开日期序列,提取所需字段得到最终结果 df2 = df1.explode('Date')[['Date', 'event']] # 可选:如果需要日期输出为字符串格式,补充执行以下代码 df2['Date'] = df2['Date'].dt.strftime('%Y-%m-%d')
说明
- 自动兼容d0=d1的单日区间场景,无需额外分支判断
- 要求pandas版本≥0.25(支持explode方法),当前主流pandas版本均满足要求
- 运行效率高,适配事件类型多、数据量大的实际场景
内容的提问来源于stack exchange,提问作者Антон
相关产品推荐
相关产品推荐

