Ich habe einen Datenrahmen mit 4 Spalten (A, B, C, D). D hat einige NaN-Einträge. Ich möchte die NaN-Werte durch den Durchschnittswert von D mit dem gleichen Wert von A, B, C füllen. Wenn der Wert von A, B, C, D beispielsweise x, y, z und Nan ist, möchte ich, dass der NaN-Wert durch den Durchschnitt von D für die Zeilen mit dem Wert von A ersetzt wird , B, C sind jeweils x, y, z.Wie fillna von groupby Ausgaben in Pandas?
1
A
Antwort
4
Ich glaube, Sie brauchen:
df.D = df.groupby(['A','B','C'])['D'].apply(lambda x: x.fillna(x.mean()))
Probe:
df = pd.DataFrame({'A':[1,1,1,3],
'B':[1,1,1,3],
'C':[1,1,1,3],
'D':[1,np.nan,3,5]})
print (df)
A B C D
0 1 1 1 1.0
1 1 1 1 NaN
2 1 1 1 3.0
3 3 3 3 5.0
df.D = df.groupby(['A','B','C'])['D'].apply(lambda x: x.fillna(x.mean()))
print (df)
A B C D
0 1 1 1 1.0
1 1 1 1 2.0
2 1 1 1 3.0
3 3 3 3 5.0
2
Link für weitere Informationen über diese Frage zu duplizieren: Pandas Dataframe: Replacing NaN with row average
anderen vorgeschlagene Art und Weise, es zu tun in dem genannten Link verwendet eine einfache Füllmethode für die Transponierte: df.T.fillna(df.mean(axis=1)).T
1
df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
wäre schneller als apply
In [2400]: df
Out[2400]:
A B C D
0 1 1 1 1.0
1 1 1 1 NaN
2 1 1 1 3.0
3 3 3 3 5.0
In [2401]: df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
Out[2401]:
0 1.0
1 2.0
2 3.0
3 5.0
Name: D, dtype: float64
In [2402]: df['D'] = df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
In [2403]: df
Out[2403]:
A B C D
0 1 1 1 1.0
1 1 1 1 2.0
2 1 1 1 3.0
3 3 3 3 5.0
Einzelheiten
In [2396]: df.shape
Out[2396]: (10000, 4)
In [2398]: %timeit df['D'].fillna(df.groupby(['A','B','C'])['D'].transform('mean'))
100 loops, best of 3: 3.44 ms per loop
In [2397]: %timeit df.groupby(['A','B','C'])['D'].apply(lambda x: x.fillna(x.mean()))
100 loops, best of 3: 5.34 ms per loop
Verwandte Themen
- 1. Pandas - fillna mit Teilmenge von Zeilen
- 2. pandas fillna mit mehreren Spalten
- 3. Pandas: fillna funktioniert nicht wie erwartet
- 4. Wie GROUPBY und in pandas
- 5. Pandas: Syntax in GROUPBY
- 6. Pandas fillna Datum aus einer anderen Spalte
- 7. Pandas - FillNa mit einer anderen Spalte
- 8. Groupby in Pandas ergibt Groupby Object anstelle von Dataframe
- 9. Umbenennen von Spaltennamen in Pandas Groupby Funktion
- 10. wie in komplizierten Zustand in Pandas GROUPBY
- 11. Pandas Dataframe groupby: Doppel groupby & Apply-Funktion
- 12. Pandas GroupBy Date Chunks
- 13. Pandas groupby über Liste
- 14. Python pandas groupby() Ergebnis
- 15. Pandas groupby Datumsbereich
- 16. Python Pandas groupby Mehrfachzählungen
- 17. groupby Objekt in Pandas Python
- 18. Pandas Groupby Wertebereich
- 19. Pandas GroupBy gelten alle
- 20. Pandas GROUPBY Objektfilterung
- 21. GROUPBY Pandas berechnen Prozentsatz
- 22. Pandas Groupby kumulative Menge
- 23. Pandas GROUPBY + Liste
- 24. pandas groupby verursacht Keyerror
- 25. Pandas Dataframe groupby
- 26. Pandas groupby Methode
- 27. Python pandas groupby manipulation?
- 28. Python Pandas groupby Methode
- 29. optimieren groupby Aggregation Pandas
- 30. Pandas GROUPBY kumulative Summe
Wenn meine oder eine andere Antwort war hilfreich, vergessen Sie nicht [akzeptieren] (http: //meta.stackexchange .com/a/5235/295067) es - klicke auf das Häkchen ('✓') neben der Antwort, um es von ausgegraut auf ausgefüllt zu setzen. Danke. – jezrael