2013-04-28 199 views
32

これはかなり正直なようですが、ほぼ一日後に解決策が見つかりませんでした。私はread_csvでデータフレームを読み込み、日付と時刻の列を1つの列に簡単に解析し、結合し、索引付けしましたが、今ではできるだけ時間や分単位で計算を実行したいピボットに勝る。Python Pandas:時間と分の集計にdatetime列をグループ化します

私は時または分に再サンプリングする方法を知っていますが、毎時/分に関連する日付部分を維持していますが、Excelピボットのグループ化と同様に時と分にのみデータセットを集計し、 "分"は何も選択していない。

ご協力いただければ幸いです。

+0

それぞれの 'datetime'から' time'オブジェクトを取得するのに役立ちますか? 'dataframe.index'から' pandas.Series'オブジェクトを作成し、それをインデックスに割り当てることができます(現在のものを置き換えます)。データフレームのいくつかの行を「印刷」できますか? – heltonbiker

+1

ありがとうございます。私は時間オブジェクトを使用することに慣れていないので、それはあなたが意味するものならdatetime列から時間を取得します。私はちょうど毎時と細かいそれぞれ次のコードを使用して必要なものに非常に近い方法を考え出しましたが、それを行うより簡単な方法は、特に時間と分一緒に持っている方法ですか?:hourly = ims_havas.groupby ims_havas.index.hour).sum() – horatio1701d

答えて

33

dfがあなたのデータフレームでどこに、行うことはできません:私はGROUPBYのこのタイプを探していたとき

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

Peeerfect!残りの日を保存してくれてありがとう! – horatio1701d

+0

はい、それは私にとっても完璧に機能しますが、私は質問をフォローアップしています。この「グループ化された時系列」をmatlibplotのx軸としてどのように使うことができますか? –

+0

私は 'df.groupby([times.dt.hour、times.dt.minute])...と関係がありました。 – akilat90

9

はこの出くわしました。上記の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オブジェクトはパンダの時刻を表現したものです。最初の行はdatetimesの配列を作成します。 2行目はこの配列を使用してすべての行の時分データを取得し、これらの値でデータをグループ化します(docs)。

関連する問題