我正在使用pandas创建一个数据透视表。如果我在布尔值列上设置aggfunc=sum
或aggfunc=count
,则只要列中至少有一个True
,它就可以正常工作。例如。 [True, False, True, True, False]
将返回3.但是,如果所有值均为False
,则数据透视表将输出False
而不是0.无论如何,我都无法绕过它。我可以绕过它的唯一方法是定义一个函数如下:
def f(x):
mySum = sum(x)
return "0" if mySum == 0 else mySum
然后设置aggfunc=lambda x: f(x)
。虽然这在视觉上有效,但仍然让我感到不安的是输出string
是唯一可以让0坚持的方法。如果我将其转换为int
,或尝试返回0.0,或者根本不做任何数字,False
始终是结果。
为什么会这样,在这种情况下如何让数据透视表实际给我0(仅修改aggfunc
,而不是数据框本身)?
答案 0 :(得分:3)
cols count index
0 a False 0
1 b False 1
2 c False 0
3 a False 1
4 b False 0
5 c False 1
6 a False 0
7 b False 1
8 c False 0
9 a False 1
10 b False 0
11 c False 1
输出
astype
您可以在转动之前使用int
(docs)转换为res = df.pivot_table(values='count', aggfunc=np.sum, columns='cols', index='index').astype(int)
print(res)
。
cols a b c
index
0 0 0 0
1 0 0 0
输出
-l