У меня огромный массив данных для панд в форме, подобной этому примеру:
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()
.