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

标签 python python-2.7 pandas

>> 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')

如果我这样做,该行将被视为具有一个值,确实如此,我明白这一点。我不确定如何将该行包含在总计中,但实际上并未计算 None/NaN/NaT 值?

返回:

    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

最佳答案

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

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

或者,您可以将 Foo 列设为 Categorical

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

关于python - 如何从 python groupby 计数中排除 NaN/NaT/None,但包含该行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585993/

相关文章:

python - 如何在python中绘制 'historical'数据

python - Pandas:结合 ISIN 识别的 DataReader

python - 在融合表中添加 KML 作为几何列?

python - 是否可以在 Pandas 中将 searchsorted 与 MultiIndex 索引一起使用?

python - 如何在 Tkinter 文本搜索方法中使用正则表达式?

Python命令行加载栏

python - 在 python 中使用 networkx 创建树数据

Python 2.7 - 将一系列拆分为具有相同数量项目的间隔(与 pandas.cut() 类似)

python - 如何写入 LLDB 中的 XMM 寄存器

python - 如何使垂直线触及图表的边界?