Pandas:将Groupby DateObject转换为PeriodObject

时间:2013-06-04 08:54:32

标签: python group-by pandas period

我有以下DataFrame:

df = pd.DataFrame({
'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(),
'Trades': [1,3,5,8,9,3],
'Date' : [
    DT.datetime(2013,1,1,13,0),
    DT.datetime(2013,1,1,13,5),
    DT.datetime(2013,1,1,20,0),
    DT.datetime(2013,1,2,10,0),
    DT.datetime(2013,1,2,12,0),                                      
    DT.datetime(2013,1,2,14,0),
    ]})

现在我想按天分组并计算每个交易者的平均交易数量。为此,我使用groupby函数:

gr = df.groupby([df.Date.map(lambda d: d.date()), 'Buyer']).mean()

是否有可能将生成的'gr'DataFrame转换为带有PeriodIndex的DataFrame,以便我可以使用resample函数计算每周和每月的平均值?

重要提示:我需要重新采样'gr'数据帧而非原始'df'

我会非常感谢任何帮助。

谢谢

安迪

1 个答案:

答案 0 :(得分:0)

首先,将Index(带日期对象)转换为DatetimeIndex。 然后将DatetimeIndex转换为PeriodIndex。

In [103]: gr.reset_index(level=1)
Out[103]: 
           Buyer  Trades
Date                        
2013-01-01  Carl     3.0 
2013-01-01  Mark     3.0 
2013-01-02  Carl     3.0 
2013-01-02   Joe     8.5 

In [104]: gr = gr.reset_index(level=1)

In [105]: gr.index = gr.index.to_datetime().to_period('M')

In [106]: gr
Out[106]: 
        Buyer  Trades
2013-01  Carl     3.0 
2013-01  Mark     3.0 
2013-01  Carl     3.0 
2013-01   Joe     8.5