2016-09-17 5 views
1

今、私はパンダを使ってグルーピングすることについてちょっと混乱します。単一の値ではないチャンクによるパンダグループ

私は3列のデータ(60Kを超える行)の設定されている:

2015/12/18 11:12:49 +0300 d1 b1 
2015/12/18 11:12:50 +0300 d2 b2 
2015/12/18 11:13:08 +0300 d1 b3 
2015/12/18 11:13:36 +0300 d2 b4 
2015/12/18 11:13:43 +0300 d2 b5 
2015/12/18 11:14:21 +0300 d2 c0 
2015/12/18 11:14:42 +0300 d2 c1 
2015/12/18 11:15:13 +0300 d1 c2 
2015/12/18 11:15:19 +0300 d3 c3 

そして、私は(のは、0-4、4-8、8-言わせた期間でグループ化された行数を取得する必要があります12時間など4時間)と平日とその後、1週間以内に1つのセットを取得します。

私は(時間は第一列の名前です)、週に1時間毎の合計を取得することができます。

dind = pd.DatetimeIndex(df.time) 
gr = df.groupby([dind.weekday, dind.hour]) 
gr.size() 

しかし、私はどのようにグループの塊で把握して、単一へMultiIndexを結果としてマージすることはできませんインデックス列。

私はそれが問題の明確な説明であったと思います。

答えて

1

質問の最初の部分は、4時間のチャンクでグループ化する方法は簡単ですし、以下の両方のオプションで対処しています。 df.index.hour // 4

「1つの列にマージ」と解釈するいくつかの方法があるため、2番目の部分はあいまいでした。私はあなたに2つの選択肢を提供しました。

オプション1

gpd = df.groupby([df.index.weekday, df.index.hour // 4]).size() 
gpd.index = gpd.index.to_series() 
gpd 

(4, 2) 9 
dtype: int64 

オプション2つの

gpd = df.groupby([df.index.weekday, df.index.hour // 4]).size() 
gpd.index = ['{}_{}'.format(*i) for i in gpd.index] 
gpd 

4_2 9 
dtype: int64 
+0

感謝。魅力のように動作します。 – gudvinr

+0

あなたが気にしないなら、私は関連する質問があります。 全体を一括してチャンクする方法は? 'df.groupby([dind.date // N])'のようなものですが、日付オブジェクトは分割できません。 – gudvinr

+1

@ gudvinr 'df.groupby(pd.TimeGrouper( '3D'))' – piRSquared

関連する問題