2013-04-28 45 views
32

這似乎是相當直接,但幾乎整整一天後,我還沒有找到解決方案。我已經使用read_csv加載了我的數據框,並且可以輕鬆地解析,組合並將日期和時間列索引到一列中,但現在我希望能夠根據類似於您可以執行的操作的小時和分鐘組重新計算和執行計算excel樞軸。Python熊貓:集團日期時間列成小時和分鐘聚合

我知道如何重新採樣到小時或分鐘,但它維持與每小時/分鐘關聯的日期部分,而我想只將數據集聚合到小時和分鐘,類似於在Excel中分組並且選擇「小時」和「分鐘」但不選擇其他任何東西。

任何幫助將不勝感激。

+0

它有助於從每個'datetime'獲得'time'對象嗎?你可以從你的'dataframe.index'創建一個'pandas.Series'對象,然後將它分配給索引(替換當前的)。你可以「打印」你的數據幀的一些行嗎? – heltonbiker 2013-04-28 18:18:56

+1

謝謝。我不熟悉使用時間對象從日期時間列中獲取時間,如果這是您的意思。我只是想出了一種非常接近我需要的方式,分別使用下面的代碼分別進行每小時和每分鐘的處理,但有沒有更簡單的方法來實現它,特別是一種每小時和每分鐘一次的方式?:hourly = ims_havas.groupby( ims_havas.index.hour).sum() – horatio1701d 2013-04-28 18:34:45

回答

33

不能這樣做,其中df是您的數據框:

times = pd.to_datetime(df.timestamp_col) 
df.groupby([times.hour, times.minute]).value_col.sum() 
+0

Peeerfect!非常感謝你爲我節約了一天的餘生! – horatio1701d 2013-04-28 18:45:05

+0

是的,對我來說也是完美的,但我有跟進的問題:我怎樣才能將這個「分組時間序列」用作matlibplot中的x軸? – 2014-03-12 21:54:57

+0

我必須處理'df.groupby([times.dt.hour,times.dt.minute])...' – akilat90 2017-10-26 05:29:23

9

碰到這個時候我正在尋找這種類型的GROUPBY。 Wes上面的代碼對我來說不起作用,不確定是否因爲pandas隨着時間的推移發生變化。

pandas 0.16.2,我到底做的是:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))]) 
grp.count() 

你必須(小時,分鐘)元組的分組索引。如果你想多指數:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour), 
         data.datetime_col.map(lambda x : x.minute)]) 
21

韋斯的代碼不適合我。但DatetimeIndex函數(docs)那樣:

times = pd.DatetimeIndex(data.datetime_col) 
grouped = df.groupby([times.hour, times.minute]) 

的DatetimeIndex目的是在一個大熊貓的倍表示。第一行創建一個日期時間的數組。第二行使用此數組獲取所有行的小時和分鐘數據,從而允許按這些值對數據進行分組(docs)。