熊猫groupby计算一列中的零个数

时间:2018-07-26 13:50:54

标签: python pandas dataframe

我有一个数据框,例如:

Date             B           C   
20.07.2018      10           8
20.07.2018       1           0
21.07.2018       0           1
21.07.2018       1           0

如何计算每个日期每一列的零值和非零值? 使用.sum()对我没有帮助,因为它将求和非零值。 谢谢!

例如:零值的预期输出:

Date          B         C
20.07.2018    0         1
21.07.2018    1         1

3 个答案:

答案 0 :(得分:5)

我认为需要DataFrameGroupBy.agg并与0sum进行比较:

df1 = df.groupby('Date').agg(lambda x: x.eq(0).sum())
print (df1)

            B  C
Date            
20.07.2018  0  1
21.07.2018  1  1

df2 = df.groupby('Date').agg(lambda x: x.ne(0).sum())
print (df2)
            B  C
Date            
20.07.2018  2  1
21.07.2018  1  1

答案 1 :(得分:1)

使用melt,然后使用groupby

Newdf=df.melt('Date')
Newdf.value=Newdf.value.eq(0).astype(int)

Newdf.groupby(['Date','variable']).value.value_counts().unstack([1,2]).sort_index(level=0,axis=1)
Out[69]: 
variable      B         C     
value         0    1    0    1
Date                          
20.07.2018  NaN  2.0  1.0  1.0
21.07.2018  1.0  1.0  1.0  1.0

答案 2 :(得分:1)

也尝试:

df.groupby('Date').agg(lambda x: len(x) - x.astype(bool).sum(axis=0))

输出:

Out[48]: 
            B  C
Date            
20.07.2018  0  1
21.07.2018  1  1