带有Pandas Resample的额外垃圾箱

时间:2013-05-15 20:33:56

标签: python numpy pandas grouping resampling

我有一个像这样定义的pandas数据框:

    last_4_weeks_range = pandas.date_range(                                
            start=datetime.datetime(2001, 5, 4), periods=28)               
    last_4_weeks = pandas.DataFrame(                                       
        [{'REST_KEY': 1, 'DLY_TRN_QT': 80, 'DLY_SLS_AMT': 90,              
            'COOP_DLY_TRN_QT': 30, 'COOP_DLY_SLS_AMT': 20}] * 28 +         
        [{'REST_KEY': 2, 'DLY_TRN_QT': 70, 'DLY_SLS_AMT': 10,              
            'COOP_DLY_TRN_QT': 50, 'COOP_DLY_SLS_AMT': 20}] * 28,          
        index=last_4_weeks_range.append(last_4_weeks_range))               
    last_4_weeks.sort(inplace=True)

当我去重新取样时:

In [265]: last_4_weeks.resample('7D', how='sum')
Out[265]: 
            COOP_DLY_SLS_AMT  COOP_DLY_TRN_QT  DLY_SLS_AMT  DLY_TRN_QT  REST_KEY
2001-05-04               280              560          700        1050        21
2001-05-11               280              560          700        1050        21
2001-05-18               280              560          700        1050        21
2001-05-25               280              560          700        1050        21
2001-06-01                 0                0            0           0         0

我最终得到了一个我不希望看到的额外空箱 - 2001-06-01。我不希望那个垃圾箱在那里,因为我的28天在我正在进行的7天重新取样中可以分割。我已经尝试搞乱了关闭的小瓦,但我无法逃脱那个额外的垃圾桶。为什么当我没有任何东西放入其中时会出现多余的垃圾箱?如何避免产生它?

我最终要做的是每个REST_KEY获得7天的平均值,所以做一个

In [266]: last_4_weeks.groupby('REST_KEY').resample('7D', how='sum').mean(level=0)
Out[266]: 
          COOP_DLY_SLS_AMT  COOP_DLY_TRN_QT  DLY_SLS_AMT  DLY_TRN_QT  REST_KEY
REST_KEY                                                                      
1                      112              168          504         448       5.6
2                      112              280           56         392      11.2

但是额外的空箱子正在抛弃我的意思(例如,对于COOP_DLY_SLS_AMT我有112,这是(20 * 7 * 4)/ 5而不是我得到的140(20 * 7 * 4) / 4如果我没有那个额外的bin。)我也不希望REST_KEY出现在聚合中,因为它是groupby的一部分,但这确实是一个小问题。

P.S。我正在使用pandas 0.11.0

1 个答案:

答案 0 :(得分:-1)

我认为这是一个错误:

mac上带有pandas 0.9.0dev的输出是:

In [3]: pandas.__version__
Out[3]: '0.9.0.dev-1e68fd9'


In [6]: last_4_weeks.resample('7D', how='sum')
Out[6]: 
            COOP_DLY_SLS_AMT  COOP_DLY_TRN_QT  DLY_SLS_AMT  DLY_TRN_QT  REST_KEY
2001-05-04                40               80          100         150         3
2001-05-11               280              560          700        1050        21
2001-05-18               280              560          700        1050        21
2001-05-25               280              560          700        1050        21
2001-06-01               240              480          600         900        18


In [4]: last_4_weeks.groupby('REST_KEY').resample('7D', how='sum').mean(level=0)
Out[4]: 
          COOP_DLY_SLS_AMT  COOP_DLY_TRN_QT  DLY_SLS_AMT  DLY_TRN_QT  REST_KEY
REST_KEY                                                                      
1                      112              168          504         448       5.6
2                      112              280           56         392      11.2

我正在使用这个版本(通过pip冻结):

numpy==1.8.0.dev-9597b1f-20120920
pandas==0.9.0.dev-1e68fd9-20120920