如何在数据透视表中添加求和和计数

4
这是我的数据集。
customer_id hour    size
1              0       1
1              1      18
2              1       7

这是我的代码。
table = a.pivot_table(index=['customer_id'], 
                      columns='hour', 
                      fill_value=0,
                      values='size')

这是我所拥有的内容。
hour            0   1
customer_id       
1               1  18
2               8   7

What I need

hour            0   1   count  sum
customer_id       
1               1  18       2   19
2               0   7       1    7
count           1   2
sum             1  25

count 是一个分类中的非零计数,sum 是该分类中的总和。


你的输出有 count / sum count / sum 列。你确定这是你想要的吗? - jpp
@jpp 如果你有更完整的答案,可以通过任何现有的库来回答。 - Nabih Bawazir
1个回答

3
一个可能比较动态的解决方案是省略 `fill_value=0`:
table = a.pivot_table(index='customer_id', 
                      columns='hour', 
                      values='size')
print (table)
hour           0     1
customer_id           
1            1.0  18.0
2            NaN   7.0

a = table.agg(['count','sum'])
b = table.T.agg(['count','sum']).T

print (table.fillna(0).append(a).join(b))
         0     1  count   sum
1      1.0  18.0    2.0  19.0
2      0.0   7.0    1.0   7.0
count  1.0   2.0    NaN   NaN
sum    1.0  25.0    NaN   NaN

为什么在列表中传递索引 index=['customer_id'] - Pyd
1
无需翻译,@pyd。 - jezrael
它是DataFrame。 - jezrael
type(table) 是什么?当我执行 a = table.agg(['count','sum']) 时,出现了 AttributeError: 'DataFrame' object has no attribute 'agg' 的错误提示。 - Pyd
@pyd - 使用旧版pandas,检查agg - jezrael
1
它是pandas 0.20.0中的新功能。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接