我有一个巨大的熊猫数据帧,形状像这个例子:
new_id hour names values
0 0 mark 5
0 0 matt 4
0 0 alex 3
1 0 roger 2
1 0 arthur 7
1 1 alf 8
2 1 ale 6
3 1 peter 5
3 2 tom 2
4 2 andrew 7
我需要重塑它,所以我使用pivot_table()
:
dummy=dummy.pivot_table(index=['hour','new_id'],columns='name', values='values').fillna(0)
所以它变成了
names ale alex alf andrew arthur mark matt peter roger tom
hour new_id
0 0 0.0 3.0 0.0 0.0 0.0 5.0 4.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0 7.0 0.0 0.0 0.0 2.0 0.0
1 1 0.0 0.0 8.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 6.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 0.0 0.0
2 3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0
4 0.0 0.0 0.0 7.0 0.0 0.0 0.0 0.0 0.0 0.0
....
顺便说一下,这个小例子无法重现我的问题:在真实的数据集中,当我透视它时,我得到了一些不应该存在的浮点值,因为它们是聚合和初始数据集values
的总和,它们都是整数。它们不仅是浮动的,而且与确切的结果相去甚远。
为什么我会得到这些浮点值?有没有更好的方法来得到我想要的东西?我真的不想自己编写一个函数来在透视数据帧之前正确求和所有值,因为这应该正是pivot_table()
所做的。
NaN
s存在问题,它将所有值转换为float
s,因此可能的解决方案是在输入数据integer
s 时添加参数fill_value=0
:
dummy=dummy.pivot_table(index=['hour','new_id'],columns='name', values='values', fill_value=0)
print (dummy)
name ale alex alf andrew arthur mark matt peter roger tom
hour new_id
0 0 0 3 0 0 0 5 4 0 0 0
1 0 0 0 0 7 0 0 0 2 0
1 1 0 0 8 0 0 0 0 0 0 0
2 6 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 5 0 0
2 3 0 0 0 0 0 0 0 0 0 2
4 0 0 0 7 0 0 0 0 0 0
pivot_table
中的默认聚合函数是mean
,因此期望输出中至少有一个浮点值,因此它将所有值转换为float
s。
因此,如果将聚合函数更改为sum
一切正常:
dummy = dummy.pivot_table(index=['hour','new_id'],
columns='name',
values='values',
fill_value=0,
aggfunc='sum')