2016-05-10 13 views
1

Ich bin neu in pandas/python: Ich habe eine dataframe (events.number) indexiert von einem datetime Objekt.pandas datetime: groupy stündlich und jeden Montag

Ich versuche, eine Ereignisanzahl stündlich zu extrahieren, an jedem Montag (oder an einem anderen bestimmten Wochentag). Ich schrieb:

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

aber das funktioniert nicht richtig.

Ich kann die "& x.weekday==1" fallen lassen und es funktioniert, aber vermutlich alle Tage im Rahmen verwendet. Was ist die richtige (einfachste) Syntax, um nur über Montagen zu mitteln?

+0

versuchen Sie es mit Komma "," statt "&" –

+0

Dokumentation i s immer nützlich: http://pandas.pydata.org/pandas-docs/stable/groupby.html –

Antwort

2

Ich glaube, Sie erste Filter Datenrahmen mit boolean indexing müssen und dann groupby verwenden mit size:

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 

In Version 0.18.1 Sie neue Methode verwenden können DatetimeIndex.weekday_name:

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 
Verwandte Themen