透视整数数据帧时的浮点值 (python)



我有一个巨大的熊猫数据帧,形状像这个例子:

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存在问题,它将所有值转换为floats,因此可能的解决方案是在输入数据integers 时添加参数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,因此期望输出中至少有一个浮点值,因此它将所有值转换为floats。

因此,如果将聚合函数更改为sum一切正常:

dummy = dummy.pivot_table(index=['hour','new_id'],
columns='name', 
values='values', 
fill_value=0, 
aggfunc='sum')

最新更新