2016-07-12 6 views
1

Hier ist ein Beispiel:Pandas Datenrahmen: groupby durch mehrere Spalten anwenden Funktion und das Ergebnis Karte zurück

np.random.seed(1) 
df = pd.DataFrame({"x": np.random.random(size=10), 
        "y": np.arange(10)}) 
df["z"] = np.where(df.x < 0.5, 0, 1) 
print df 

Es ergibt folgendes Ergebnis:

  x y z 
0 0.417022 0 0 
1 0.720324 1 1 
2 0.000114 2 0 
3 0.302333 3 0 
4 0.146756 4 0 
5 0.092339 5 0 
6 0.186260 6 0 
7 0.345561 7 0 
8 0.396767 8 0 
9 0.538817 9 1 

Ich möchte eine neue hinzufügen Spalte mean in df mit Mittelwerte berechnet für Werte von x Spalte gruppiert von y und z Spalten. Ich weiß schon, wie Mittelwert zu berechnen:

tmp = df.groupby(["y", "z"]).mean() 

Allerdings kann ich nicht herausfinden, wie mean die Ergebnisse in eine neue Spalte zur Karte zurück.

Antwort

1

Verwendung transform das Ergebnis Ihrer groupby Betrieb zurück als Spalte hinzufügen transform, kehrt ein Series mit Index auf den ursprünglichen df ausgerichtet es ist:

In [15]: 
df['mean'] = df.groupby(["y", "z"]).transform('mean') 
df 

Out[15]: 
      x y z  mean 
0 0.423578 0 0 0.423578 
1 0.270675 1 0 0.270675 
2 0.707611 2 1 0.707611 
3 0.589192 3 1 0.589192 
4 0.768653 4 1 0.768653 
5 0.420577 5 0 0.420577 
6 0.930490 6 1 0.930490 
7 0.380576 7 0 0.380576 
8 0.055940 8 0 0.055940 
9 0.678355 9 1 0.678355 
Verwandte Themen