旋转整数数据帧时的浮点值(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')