2016-10-28 26 views
5

Ben bir veri kümesi bazı şuna benzer veriler eksik olacaktır vardır:Pandalar: Boş değerler bir groupby ortalamasıyla nasıl doldurulur?

Bir modelde verilerini kullanmak için boş değerlere doldurmak gerekir
id category  value 
1  A   NaN 
2  B   NaN 
3  A   10.5 
4  C   NaN 
5  A   2.0 
6  B   1.0 

. Her seferinde bir kategori ortaya çıktığında NULL. Yapmak istediğim, kategori A ve B gibi birden fazla değere sahip olan durumlar için boş değerlerin o kategorinin ortalamasıyla değiştirilmesidir. Ve sadece tek bir olay ile kategori C için sadece verilerin geri kalanının ortalamasını doldurun.

Tüm satırların ortalamasını almak için bunu C gibi durumlarda yapabileceğimi biliyorum, ancak A ve B için kategorik araçları yapmaya ve boş değerlerini değiştirmeye çalışıyorum.

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

Ben mean ile bu

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 

cevap

5
Sana groupby kullanabilirsiniz düşünüyorum

ve applyfillna gibi olmak nihai df gerekir. Sonra bazı kategori sadece NaN değerleri varsa NaN olsun, böylece NaN doldurmak için sütunun tüm değerlerin mean kullanın: Büyük

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

! ihtiyacım olan buydu. Teşekkürler ! – sfactor

+0

İşinizi seviyorum, bu harika – Axis