2016-12-23 3 views
2

Ich habe ein Dataset, das etwa so aussieht, aber viel größer ist.Füllen Sie fehlende Zeilen aus Spalten nach groupby in Python Pandas

Column A Column B Result 
1   1   2.4 
1   4   2.9 
1   1   2.8 
2   5   9.3 
3   4   1.2 

df.groupby(['Column A','Column B'])['result'].mean() 

Column A Column B Result 
1   1   2.6 
      4   2.9 
2   5   9.3 
3   4   1.2 

Ich möchte von 1-10 für Spalte B mit den Ergebnissen für diese Zeilen einen Bereich haben, der Durchschnitt der Spalte A und Spalte B zu sein Das ist also meine gewünschte Tabelle:

Column A Column B Result 
1   1   2.6 
      2   2.75 
      3   2.75 
      4   2.9 
      5   6.025 
2   1   5.95 
      2   9.3 
      3   9.3 
... 

Hoffentlich kommt der Punkt rüber. Ich weiß, dass die durchschnittliche Sache ziemlich verwirrend ist, also würde ich mich damit begnügen, einfach die fehlenden Werte meiner gewünschten Reichweite auszufüllen. Ich schätze die Hilfe!

Antwort

1

Sie müssen reindex durch neue index von MultiIndex.from_product erstellt und dann groupby von der ersten Ebene Column A mit fillna von mean pro Gruppen:

df = df.groupby(['Column A','Column B'])['Result'].mean() 
mux = pd.MultiIndex.from_product([df.index.get_level_values(0).unique(), 
            np.arange(1,10)], names=('Column A','Column B')) 
df = df.reindex(mux) 
df = df.groupby(level='Column A').apply(lambda x: x.fillna(x.mean())) 
print (df) 
Column A Column B 
1   1   2.60 
      2   2.75 
      3   2.75 
      4   2.90 
      5   2.75 
      6   2.75 
      7   2.75 
      8   2.75 
      9   2.75 
2   1   9.30 
      2   9.30 
      3   9.30 
      4   9.30 
      5   9.30 
      6   9.30 
      7   9.30 
      8   9.30 
      9   9.30 
3   1   1.20 
      2   1.20 
      3   1.20 
      4   1.20 
      5   1.20 
      6   1.20 
      7   1.20 
      8   1.20 
      9   1.20 
Name: Result, dtype: float64 
Verwandte Themen