Pandas Pivot表继续返回False而不是0

时间:2016-08-04 00:30:10

标签: python pandas boolean aggregate-functions pivot-table

我正在使用pandas创建一个数据透视表。如果我在布尔值列上设置aggfunc=sumaggfunc=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,而不是数据框本身)?

1 个答案:

答案 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

您可以在转动之前使用intdocs)转换为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