2017-06-08 2 views
0

Ich habe einen Pandas-Datenrahmen und will jeden Wert mit dem Mittelwert dafür ersetzen.Pandas ersetzen Spalte mit Mittelwert für Werte

ID X  Y 
    1  a  1 
    2  a  2 
    3  a  3 
    4  b  2 
    5  b  4 

Wie ersetze ich Y-Werte durch Mittelwert Y für jedes eindeutige X?

ID X  Y 
    1  a  2 
    2  a  2 
    3  a  2 
    4  b  3 
    5  b  3 
+2

verwandt und wahrscheinlich dupe: https://StackOverflow.com/Questions/32842728/python-pandas-group-by-the-Same-value-and-replace-with-the-mean – EdChum

Antwort

3

Verwendung transform:

df['Y'] = df.groupby('X')['Y'].transform('mean') 
print (df) 
    ID X Y 
0 1 a 2 
1 2 a 2 
2 3 a 2 
3 4 b 3 
4 5 b 3 

Für neue Spalte in einer anderen DataFrame Verwendung map mit drop_duplicates:

df1 = pd.DataFrame({'X':['a','a','b']}) 
print (df1) 
    X 
0 a 
1 a 
2 b 

df1['Y'] = df1['X'].map(df.drop_duplicates('X').set_index('X')['Y']) 
print (df1) 
    X Y 
0 a 2 
1 a 2 
2 b 3 

Eine andere Lösung:

df1['Y'] = df1['X'].map(df.groupby('X')['Y'].mean()) 
print (df1) 
    X Y 
0 a 2 
1 a 2 
2 b 3 
+0

Danke. Wenn ich einen anderen ähnlichen Datenrahmen ohne die Y-Spalte habe, wie kann ich eine weitere Spalte für die X-Werte mit den berechneten Mitteln hinzufügen? –

+0

Harte Antwort ohne Daten. Aber vielleicht brauchen [this] (https://stackoverflow.com/a/44414968/2901002) - 'map' oder' merge' – jezrael

+0

Bitte überprüfen Sie die bearbeitete Antwort. Wenn meine Antwort hilfreich war, vergiss sie nicht [accept] (http://meta.stackexchange.com/a/5235/295067). Vielen Dank. – jezrael

Verwandte Themen