2017-09-08 100 views
7

"A", "B", "C" sütunlarıyla bir veri çerçevem ​​var df. BaşarısızBir pandalar veri kümesinde isnull() ve groupby() öğesini kullanma

aşağıdaki çalıştı: df.groupby('A')['B'].isnull().sum().to_dict()

Herhangi bir yardım olacak Ben 'A' göre gruplandırılmış olarak sütun 'B' null değerlerin sayısını saymak ve bunun dışında bir sözlük yapmak istiyorum takdir.

cevap

9

Ayar

df = pd.DataFrame(dict(A=[1, 2] * 3, B=[1, 2, None, 4, None, None])) 

df 

    A B 
0 1 1.0 
1 2 2.0 
2 1 NaN 
3 2 4.0 
4 1 NaN 
5 2 NaN 

Seçenek 1

df['B'].isnull().groupby(df['A']).sum().to_dict() 

{1: 2.0, 2: 1.0} 

Seçenek 2

df.groupby('A')['B'].apply(lambda x: x.isnull().sum()).to_dict() 

{1: 2, 2: 1} 

Seçenek 3
Alma yaratıcı

df.A[df.B.isnull()].value_counts().to_dict() 

{1: 2, 2: 1} 

Seçenek 4

from collections import Counter 

dict(Counter(df.A[df.B.isnull()])) 

{1: 2, 2: 1} 

Seçenek 5

from collections import defaultdict 

d = defaultdict(int) 
for t in df.itertuples(): 
    d[t.A] += pd.isnull(t.B) 
dict(d) 

{1: 2, 2: 1} 

Seçenek 6
gereksiz yere karmaşık

(lambda t: dict(zip(t[1], np.bincount(t[0]))))(df.A[df.B.isnull()].factorize()) 

{1: 2, 2: 1} 

Seçenek 7

df.groupby([df.B.isnull(), 'A']).size().loc[True].to_dict() 

{1: 2, 2: 1} 
+3

sizin kutunun :) dışında bir yöntem bulmak zor gerçek – Wen

+0

sen @piRSquared teşekkür çok yararlıdır bkz –

1

Ya count ve size arasında farklı kullanarak, link

(df.groupby('A')['B'].size()-df.groupby('A')['B'].count()).to_dict() 
Out[119]: {1: 2, 2: 1}