旋转整数数据帧时的浮点值(pandas-python)

旋转整数数据帧时的浮点值(pandas-python),python,pandas,sum,pivot-table,Python,Pandas,Sum,Pivot Table,我有一个大熊猫数据框,形状如下: 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

我有一个大熊猫数据框,形状如下:

 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\u table()

所以它变成了

        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
....
顺便说一句,这个小例子不能重现我的问题:在真实的数据集中,当我透视它时,我得到一些不应该存在的浮点值,因为它们是初始数据集的
的聚合和总和,它们都是整数。它们不仅是浮动的,而且与精确结果相差甚远


为什么我要得到这些浮点值?有没有更好的办法得到我想要的?我真的不想自己编写一个函数,在旋转数据帧之前正确地求和所有值,因为这应该正是
pivot\u table()
所做的。

存在问题
NaN
s,它将所有值转换为
浮点值
s,因此如果输入数据为
整数
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
中的默认聚合函数为
mean
,因此输出中至少应有一个浮点值,因此它将所有值转换为
float
s

因此,如果将聚合函数更改为
sum
all working nice:

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

奇怪的是,我在示例数据集上得到了整数,但在整个数据帧上仍然得到了浮点数,我不知道为什么。@sato-什么是输入数据的
df.dtypes
?对于“values”列,它是int64,我知道,我真的不知道如何解决这个问题。我只知道它给了我完全错误的结果。在旋转数据帧之前计算总和是个好主意吗?如果是这样,我怎么能做到呢?@sato-I can get是更早的:)超级,我真的很惊讶为什么要得到它:)
dummy = dummy.pivot_table(index=['hour','new_id'],
                          columns='name', 
                          values='values', 
                          fill_value=0, 
                          aggfunc='sum')