2016-05-10 16 views
1

私はpandas/pythonの新人です: dataframe(events.number)はdatetimeオブジェクトでインデックスされています。pandas datetime:1時間ごとと毎週月曜日

毎週月曜日(または他の特定の平日)に毎時イベントを抽出しようとしています。私は書いた:

hour_tally_monday = events.number.groupby(lambda x: (x.hour & x.weekday==0)).count() 

これは正しく動作しません。

& x.weekday==1」を削除できますが、フレーム内のすべての日が使用されている可能性があります。月曜日に平均すると、(最も単純な)正しい構文は何ですか?

+0

をカンマ "、"& "の代わりに"& " –

+0

ドキュメントiいつでも役に立つ:http://pandas.pydata.org/pandas-docs/stable/groupby.html –

答えて

2

私はsizegroupbyを使用し、あなたがboolean indexingで最初のフィルタデータフレームが必要だと思うし、:

新しいメソッド DatetimeIndex.weekday_name使用できるバージョン 0.18.1
import pandas as pd 

start = pd.to_datetime('2016-02-01') 
end = pd.to_datetime('2016-02-25') 
rng = pd.date_range(start, end, freq='12H') 

events = pd.DataFrame({'number': [1] * 20 + [2] * 15 + [3] * 14}, index=rng) 
print events 
        number 
2016-02-01 00:00:00  1 
2016-02-01 12:00:00  1 
2016-02-02 00:00:00  1 
2016-02-02 12:00:00  1 
2016-02-03 00:00:00  1 
2016-02-03 12:00:00  1 
2016-02-04 00:00:00  1 
2016-02-04 12:00:00  1 
2016-02-05 00:00:00  1 
2016-02-05 12:00:00  1 
2016-02-06 00:00:00  1 
2016-02-06 12:00:00  1 
2016-02-07 00:00:00  1 
... 
... 
filtered = events[events.index.weekday == 0] 
print filtered 
        number 
2016-02-01 00:00:00  1 
2016-02-01 12:00:00  1 
2016-02-08 00:00:00  1 
2016-02-08 12:00:00  1 
2016-02-15 00:00:00  2 
2016-02-15 12:00:00  2 
2016-02-22 00:00:00  3 
2016-02-22 12:00:00  3 

:使用してみてください

filtered = events[events.index.weekday_name == 'Monday'] 
print filtered 
        number 
2016-02-01 00:00:00  1 
2016-02-01 12:00:00  1 
2016-02-08 00:00:00  1 
2016-02-08 12:00:00  1 
2016-02-15 00:00:00  2 
2016-02-15 12:00:00  2 
2016-02-22 00:00:00  3 
2016-02-22 12:00:00  3 

print filtered.groupby(filtered.index.hour).size() 
0  4 
12 4 
dtype: int64 
関連する問題