2016-10-28 13 views
5

Mam zestaw danych będzie brakujące dane, które wygląda tak:Pandy: Jak wypełnić wartości null ze średnią grupy?

id category  value 
1  A   NaN 
2  B   NaN 
3  A   10.5 
4  C   NaN 
5  A   2.0 
6  B   1.0 

muszę wypełnić null korzystać z danych w modelu. Za każdym razem, gdy pojawia się kategoria po raz pierwszy, jest to NULL. Sposób, w jaki chcę to zrobić, dotyczy przypadków takich jak kategorie A i B, które mają więcej niż jedną wartość, zastępując wartości null średnią z tej kategorii. A dla kategorii C tylko z jednym wystąpieniem wystarczy wpisać średnią pozostałych danych.

Wiem, że mogę to zrobić po prostu dla przypadków takich jak C, aby uzyskać średnią wszystkich wierszy, ale utknąłem próbując zrobić kategorie dla A i B i zastępując wartości null.

df['value'] = df['value'].fillna(df['value'].mean()) 

muszę ostateczną df być jak ten

id category  value 
1  A   6.25 
2  B   1.0 
3  A   10.5 
4  C   4.15 
5  A   2.0 
6  B   1.0 

Odpowiedz

5

myślę, że można użyć groupby i applyfillna z mean. Następnie dostać NaN jeśli niektóre kategoria ma tylko NaN wartości, więc należy używać mean wszystkich wartości kolumny do wypełniania NaN:

df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean())) 
df.value = df.value.fillna(df.value.mean()) 
print (df) 
    id category value 
0 1  A 6.25 
1 2  B 1.00 
2 3  A 10.50 
3 4  C 4.15 
4 5  A 2.00 
5 6  B 1.00 
+0

wielki! tego właśnie potrzebowałem. dzięki ! – sfactor

+0

Podoba mi się twoja praca, to jest fajne – Axis

Powiązane problemy