2017-03-03 4 views
1
>> df 

    Foo  Bar  Number Date 
0 abc  None NaN  NaT 
1 abcdefg None NaN  NaT 
2 abcd this 1111222 3/8/2017 
3 abcd that 1233336 3/3/2017 
4 abcd what 1346554 3/3/2017 
5 abcde that 8889995 3/9/2017 
6 abcde this 1849552 3/8/2017 
7 abcd that 7418652 3/3/2017 
8 abcdef this 4865154 3/7/2017 


>> df.groupby(['Foo']).size().reset_index(name='Total') 

このようにすれば、行は1つの値を持つとしてカウントされ、それはわかります。 Totalに行を含める方法はわかりませんが、実際にはNone/NaN/NaTの値はカウントされません。Python groupby countからNaN/NaT/Noneを除外するにはどうしたらいいですか?

戻り値:

Foo  Total 
0 abc  1 
1 abcd 4 
2 abcde 2 
3 abcdef 1 
4 abcdefg 1 

期待される結果:あなたが最初のヌルをドロップすることができ

Foo  Total 
0 abc  0 
1 abcd 4 
2 abcde 2 
3 abcdef 1 
4 abcdefg 0 

答えて

1

、その後、フィル値を持つ最後のFoo列の一意の値でインデックスを再作成。

(df.dropna().groupby('Foo') 
      .size() 
      .reindex(df.Foo.unique(), fill_value=0) 
      .reset_index(name='total')) 

または代わりに、あなたはあなたのFooCategoricalを作ることができます。

df.Foo = pd.Categorical(df.Foo) 
df.dropna().groupby('Foo').size().reset_index(name='total') 

それだっデモ

>>> (df.dropna().groupby('Foo') 
       .size() 
       .reindex(df.Foo.unique(), fill_value=0) 
       .reset_index(name='total')) 

     Foo total 
0  abc  0 
1 abcdefg  0 
2  abcd  4 
3 abcde  2 
4 abcdef  1 

############################################################################ 

>>> df.Foo = pd.Categorical(df.Foo) 

>>> df.dropna().groupby('Foo').size().reset_index(name='total') 

     Foo total 
0  abc  0 
1  abcd  4 
2 abcde  2 
3 abcdef  1 
4 abcdefg  0 
+0

、ありがとうございました!!私はCategoricalをまだ使用していませんが、今すぐチェックします。 – Mike

+0

@Mikeようこそ! – miradulo

関連する問題