如何从python groupby计数中排除NaN/NaT/None,但包括行?

如何从python groupby计数中排除NaN/NaT/None,但包括行?,python,python-2.7,pandas,Python,Python 2.7,Pandas,如果我这样做的话,该行将被计算为有一个值,我理解这一点。我不确定如何将该行包括在总数中,但不实际计算None/NaN/NaT值 返回: >> 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/201

如果我这样做的话,该行将被计算为有一个值,我理解这一点。我不确定如何将该行包括在总数中,但不实际计算None/NaN/NaT值

返回:

>> 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')
预期结果:

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

您可以先删除空值,然后使用
Foo
列的唯一值重新索引,最后使用填充值

    Foo     Total   
0   abc     0
1   abcd    4
2   abcde   2
3   abcdef  1
4   abcdefg 0
或者,您也可以将您的
Foo

演示

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

就这样,谢谢!!我还没有用过Category,但现在将检查它。
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