2017-02-15 124 views
2

我有一個這樣的數據框,我想每60分鐘一組,並在06:30開始分組。如何按定義的時間間隔將熊貓數據框分組?

      data 
index 
2017-02-14 06:29:57 11198648 
2017-02-14 06:30:01 11198650 
2017-02-14 06:37:22 11198706 
2017-02-14 23:11:13 11207728 
2017-02-14 23:21:43 11207774 
2017-02-14 23:22:36 11207776 

我使用:

df.groupby(pd.TimeGrouper(freq='60Min')) 

我得到這個分組:

     data 
index  
2017-02-14 06:00:00  x1 
2017-02-14 07:00:00  x2 
2017-02-14 08:00:00  x3 
2017-02-14 09:00:00  x4 
2017-02-14 10:00:00  x5 

,但我在尋找這樣的結果:

     data 
index  
2017-02-14 06:30:00  x1 
2017-02-14 07:30:00  x2 
2017-02-14 08:30:00  x3 
2017-02-14 09:30:00  x4 
2017-02-14 10:30:00  x5 

我怎麼能告訴功能在6點半開始分組tervals?

如果不能通過.groupby完成(pd.TimeGrouper(freq ='60Min')),那麼最好的方法是怎麼做到的呢?

致敬和感謝提前

回答

7

使用base=30結合非常符合在pd.Grouperlabel='right'參數。

指定label='right'使時間段從6:30開始分組(高端)而不是5:30。 此外,base設置爲0 by default,因此需要將這些值抵消30以考慮日期的前向傳播。

假設你想要聚合每個子組的第一個元素,那麼:

df.groupby(pd.TimeGrouper(freq='60Min', base=30, label='right')).first() 
# same thing using resample - df.resample('60Min', base=30, label='right').first() 

產量:

      data 
index       
2017-02-14 06:30:00 11198648.0 
2017-02-14 07:30:00 11198650.0 
2017-02-14 08:30:00   NaN 
2017-02-14 09:30:00   NaN 
2017-02-14 10:30:00   NaN 
2017-02-14 11:30:00   NaN 
2017-02-14 12:30:00   NaN 
2017-02-14 13:30:00   NaN 
2017-02-14 14:30:00   NaN 
2017-02-14 15:30:00   NaN 
2017-02-14 16:30:00   NaN 
2017-02-14 17:30:00   NaN 
2017-02-14 18:30:00   NaN 
2017-02-14 19:30:00   NaN 
2017-02-14 20:30:00   NaN 
2017-02-14 21:30:00   NaN 
2017-02-14 22:30:00   NaN 
2017-02-14 23:30:00 11207728.0 
+0

爲什麼會出現在熊貓這個功能沒有文件?有沒有辦法看到pd.TimeGrouper函數的代碼?我記得在R中,你可以看到代碼寫入沒有括號的函數名稱,在python中是否有類似的東西? – EduardoRL

+0

[pd.TimeGrouper'的完整代碼](https://github.com/pandas-dev/pandas/blob/v0.19.2/pandas/core/groupby.py#L156-L312)。它從[resample'的完整代碼]繼承了一些'** kwargs'(https://github.com/pandas-dev/pandas/blob/v0.19.2/pandas/core/generic.py#L4068- L4216)也是如此(例如:'base')。 –

+0

如果你在Jupyter上,'help(pd.TimeGrouper)'也會給你一個關於它的用法,數據描述符,允許的參數,定義的方法等的簡短描述。 –