2016-04-15 10 views
0

私はtime periods of the dayにグループ化したい時系列を持っています。一日の時間単位でグループ化が簡単です:パンダ:グループ一日の一部へのタイムズク

times = pd.DatetimeIndex(df[datetime_field]) 
grouped = df.groupby([times.hour]) 

は今、私は分の任意の数でグループ化したい:

times = pd.DatetimeIndex(df[datetime_field]) 
grouped = df.groupby(['15M']) 

私は15Mを受け入れるだろうTimeGrouperクラスを見て興奮していたが、私私たちはそれを15分のビンサイズを持つ「時間帯」にグループ化したいと思っています。

minute_of_dayフィールドを追加してからpd.cutを使用してグループ化することはできますが、それは遅くてデータを複製します。

どのようなヒントもありがとうございます。それを達成するために(多くの中で)

答えて

1

片道:

df.groupby([df.ts.dt.date, df.ts.dt.hour, df.ts.dt.minute//15]) 

説明:

In [52]: df = pd.DataFrame({'ts':pd.date_range('2016-01-01', freq='1min', periods=10000), 'col': np.random.randint(0,100, len(times))}) 

In [53]: df.head(10) 
Out[53]: 
    col     ts 
0 87 2016-01-01 00:00:00 
1 89 2016-01-01 00:01:00 
2 82 2016-01-01 00:02:00 
3 37 2016-01-01 00:03:00 
4 80 2016-01-01 00:04:00 
5 24 2016-01-01 00:05:00 
6 14 2016-01-01 00:06:00 
7 32 2016-01-01 00:07:00 
8 63 2016-01-01 00:08:00 
9 81 2016-01-01 00:09:00 

In [56]: df.groupby([df.ts.dt.date, df.ts.dt.hour, df.ts.dt.minute//15]).sum().head(20) 
Out[56]: 
        col 
ts   ts ts 
2016-01-01 0 0 848 
       1 716 
       2 970 
       3 767 
      1 0 806 
       1 760 
       2 745 
       3 678 
      2 0 783 
       1 722 
       2 798 
       3 713 
      3 0 589 
       1 773 
       2 667 
       3 796 
      4 0 760 
       1 735 
       2 846 
       3 660 
+0

これは私がまさに必要です。そこから私は個人グループを引き出すためにget_groupを使いました。 – bcollins

関連する問題