我有一个数据框,例如:
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
答案 0 :(得分:5)
我认为需要DataFrameGroupBy.agg
并与0
和sum
进行比较:
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