首页 > 解决方案 > 按日期期间拆分数据框

问题描述

我想知道你是否能指出我正确的方向?

我有一个带有 dateindex 和相应值的数据框:


日期|值

2010-10-16 | 485

2010-10-17 | 486

…………

2013-10-12 | 8588

2013-10-12 | 8589


我想按 6 个月的日期块将这个数据帧拆分为单独的数据帧,命名为 period_1、period_2 等等:

period_1 包含从 2010-10-18 到(2010-10-18 + 6 个月)的值

period_2 包含从 (2010-10-18 + 6 个月) 到 (2010-10-18 + 6*2 个月) 等的值。

有没有一种优雅的方式来做到这一点?

我已经通过这样做手动完成了

period_1 = df.loc['2010-10-18':'2011-04-01'] 等等,但这有点棘手......

谢谢你。

标签: pythonpandasdataframedatetime

解决方案


我更喜欢这里的 DataFrames 字典:

start_date = df['date'].min()
end_date = df['date'].max() 

months = (end_date.year - start_date.year) * 12 + (end_date.month - start_date.month)

dfs = {f'period_{i+1}': df[df['date'].between(start_date + pd.DateOffset(months=i),
                                              start_date + pd.DateOffset(months=i+1))] for i in range(months + 1)}
# print (dfs)


print (dfs['period_1'])
        date  value
0 2010-10-16    485
1 2010-10-17    486

推荐,但可以通过变量创建 DataFrame:

for i in range(months + 1):
    df1 = df[df['date'].between(start_date + pd.DateOffset(months=i), start_date + pd.DateOffset(months=i+1))] 
    globals()[f'period_{i+1}'] =  df1

推荐阅读