【问题标题】:Splitting dataframe by date periods按日期期间拆分数据框
【发布时间】:2021-09-16 23:50:42
【问题描述】:

不知道你能否指出正确的方向?

我有一个带有日期索引和相应值的数据框:


日期|值

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'] 等等,但这有点棘手......

谢谢。

【问题讨论】:

    标签: python pandas dataframe date time


    【解决方案1】:

    我更喜欢这里的 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
    

    不是recommended,而是可以通过变量创建DataFrames:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2013-05-27
      • 2018-06-15
      • 2014-09-27
      • 2021-08-16
      • 2016-10-28
      相关资源
      最近更新 更多