pandas groupby计算列中零的数量

k4ymrczo  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(135)

我有一个框架,例如:

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

wgx48brx

wgx48brx1#

我认为需要DataFrameGroupBy.agg0sum比较:
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(DateTimeIndex):

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

des4xlb0

des4xlb02#

试试看:

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

knsnq2tg

knsnq2tg3#

使用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

字符串

相关问题