pandas groupby 计算列中零的数量

问题描述 投票:0回答:3

我有一个数据框,例如:

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
python pandas dataframe pandas-groupby
3个回答
22
投票

我相信需要

DataFrameGroupBy.agg
0
sum
进行比较:

a) 数数。零值:

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

b) 数数。非零值:

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

提高性能的另一个想法是创建

DatetimeIndex
,比较列并最后使用
sum
每个级别(日期时间索引):

df1 = df.set_index('Date').eq(0).sum(level=0)
print (df1)
            B  C
Date            
20.07.2018  0  1
21.07.2018  1  1

df2 = df.set_index('Date').ne(0).sum(level=0)
print (df2)
            B  C
Date            
20.07.2018  2  1
21.07.2018  1  1 

2
投票

也尝试一下:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.