sat*_*ato 4 python pivot-table sum pandas
我有一个巨大的熊猫数据框,形状像这个例子:
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
Run Code Online (Sandbox Code Playgroud)
我需要重塑它,所以我使用pivot_table():
dummy=dummy.pivot_table(index=['hour','new_id'],columns='name', values='values').fillna(0)
Run Code Online (Sandbox Code Playgroud)
所以它变成
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
....
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这个小例子不能重现我的问题:在真实的数据集中,当我旋转它时,我得到了一些不应该存在的浮点值,因为它们是values初始数据集的聚合和总和, 都是整数。它们不仅是浮动的,而且与确切的结果相去甚远。
为什么我会得到这些浮点值?有没有更好的方法来获得我想要的东西?在旋转数据框之前,我真的不想自己编写一个函数来对所有值进行正确求和,因为这应该正是这样pivot_table()做的。
存在问题NaNs,它将所有值转换为floats,因此fill_value=0如果输入数据为integers,则可能的解决方案是添加参数:
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
Run Code Online (Sandbox Code Playgroud)
中的默认聚合函数pivot_table是mean,因此预计输出中至少有一个浮点值,因此它将所有值转换为floats。
因此,如果将聚合函数更改为sum所有工作正常:
dummy = dummy.pivot_table(index=['hour','new_id'],
columns='name',
values='values',
fill_value=0,
aggfunc='sum')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |