mit Angenommen ich eine Zählung der Anzahl der Ereignis pro Stunde wie folgt:Durchschnittliche Anzahl der Aktionen pro Tag der Woche Pandas
np.random.seed(42)
idx = pd.date_range('2017-01-01', '2017-01-14', freq='1H')
df = pd.DataFrame(np.random.choice([1,2,3,4,5,6], size=idx.shape[0]), index=idx, columns=['count'])
df.head()
Out[3]:
count
2017-01-01 00:00:00 4
2017-01-01 01:00:00 5
2017-01-01 02:00:00 3
2017-01-01 03:00:00 5
2017-01-01 04:00:00 5
Wenn ich die Gesamt Anzahl der Ereignisse pro Tag wissen wollen der Woche, kann ich entweder tun:
df.pivot_table(values='count', index=df.index.dayofweek, aggfunc='sum')
oder
df.groupby(df.index.dayofweek).sum()
Beide Ausbeuten:
Out[4]:
count
0 161
1 170
2 164
3 133
4 169
5 98
6 172
Allerdings, wenn ich die durchschnittliche Anzahl der Ereignisse pro Tag, die folgende
df.pivot_table(values='count', index=df.index.dayofweek, aggfunc='mean') # [#1]
ist falsch berechnen möchten !! Dieser Ansatz verwendet die Summe (wie oben berechnet) und teilt sie durch die Anzahl der Stunden auf, die an jedem Wochentag angezeigt werden.
Die Abhilfe, die ich gefunden ist:
df_by_day = df.resample('1d').sum()
df_by_day.pivot_table(values='count', index=df_by_day.index.dayofweek, aggfunc='mean')
Das heißt, zuerst Resampling zu Tage, und dann schwenken. Irgendwie fühlt sich der Ansatz in [#1]
mir natürlich an. Gibt es einen pythischeren Weg, um das zu erreichen, was ich will? Warum wird ohne Resampling der Mittelwert falsch berechnet?
Sie müssen noch '' resample' df_by_day.groupby (df_by_day.index.dayofweek) [ 'count'] bedeuten() ' – Wen
@Wen hinzugefügt Ihre Antwort als Community Wiki (was bedeutet, dass ich keine Wiederholung davon bekomme). Wenn Sie sich entschließen, eine Antwort zu posten, lösche ich sie. –
@ cᴏʟᴅsᴘᴇᴇᴅ Kumpel, es ist ok ~ Ich bin hier helfen und bekommen geholfen, nicht für den Punkt ~ :-) – Wen