2017-04-17 6 views
0

Ich habe ein pandas Datenrahmen mit zwei Spalten date und value (3k unterschiedlichen Terminen, 800k Gesamt Zeilen)Python Datenrahmen gruppiert bedingten Mittelwert

Ich mag würde den Mittelwert nach Datum gruppiert berechnen, sondern nur für die Werte in das untere Dezil.

ich versucht habe, mit DCL = df['date','value'].groupby(['date'])['value'].quantile(.1), die mir den cutoff Wert für die untere Dezil gibt, für jedes Datum, wie kann ich dann für jedes Datum eines bedingten Mittelwert erstellen, so dass es nur die Werte verwendet niedriger als DCL (für jeden Datum)?

DCL = df['date','value'].groupby(['date'])['value'].quantile(.1) 
... 
2017-01-26 0.067924 
2017-01-27 0.067719 
2017-01-30 0.068561 
2017-01-31 0.068056 
2017-02-01 0.067988 
2017-02-02 0.068306 
2017-02-03 0.068311 
2017-02-06 0.067923 
2017-02-07 0.067192 
2017-02-08 0.066902 
2017-02-09 0.065978 
2017-02-10 0.065414 
2017-02-13 0.065402 
2017-02-14 0.065939 
2017-02-15 0.065519 

Der Cutoff für jeden Tag anders ist, würde ich dann von jedem Tag mit den Zahlen nur für das Datum gruppierte wie den Mittelwert von ‚Wert‘ zu berechnen, die für diesen Tag niedriger als die Grenz ist.

Antwort

1

Verwenden Sie transform, um eine neue Spalte für das Dezil-Mittel für das aktuelle Zeilendatum hinzuzufügen.

df['DCL'] = df[['date','value']].groupby(['date'])['value'].\ 
       transform(lambda g: g[g <= g.quantile(.1)].mean()) 
Verwandte Themen