带有Pandas float和int值的数据透视表

时间:2015-04-13 14:53:30

标签: python-2.7 pandas pivot

Goodmorning everyone

Python 2.7.3.final.0

熊猫0.15.1

我必须转动多个值....浮动和整数...但它不起作用。 以下是一些例子

import pandas as pd
import decimal
import numpy as np

data = [[decimal.Decimal('696.00'), decimal.Decimal('1876.53'), decimal.Decimal('2578.53'), 518L, 2008, 'Ala'], [decimal.Decimal('705.52'), decimal.Decimal('4534.33'), decimal.Decimal('5246.33'), 525L, 2007, 'Ala']]
headers = ['A', 'B', 'C', 'D', 'E', 'F']
df = pd.DataFrame(data, columns=headers)

columns = ['E']
rows = ['F']
value = ['A', 'B'] # A float, B float

pivot_df = df.pivot_table(columns=columns,
                                  index=rows,
                                  values=value,
                                  margins=True,
                                  aggfunc=np.sum)

结果

          A                         B                  
E      2007    2008      All     2007     2008      All
F                                                      
Ala  705.52  696.00  1401.52  4534.33  1876.53  6410.86
All  705.52  696.00  1401.52  4534.33  1876.53  6410.86

所有权利!

value = ['A', 'D'] # A float, D int

pivot_df = df.pivot_table(columns=columns,
                                  index=rows,
                                  values=value,
                                  margins=True,
                                  aggfunc=np.sum)

结果

       D           
E   2007 2008   All
F                  
Ala  525  518  1043
All  525  518  1043

Dosen没工作.....

和想法?

打败问候。

曼努埃尔

1 个答案:

答案 0 :(得分:1)

这可能是一种解决方法或解释,而不是答案,但是FWIW。

我怀疑你并不是真的需要存储任何小数,只是浮点数(实际上你在你的问题中将小数类型称为浮点数,但它们不是同一个东西,试试{ {1}})。我建议首先从浮动开始,或转换它们:

df.info()

十进制类型存储为对象。除非你真的需要这样做,浮动将更快,更容易使用。如果你这样做是因为你想要看到两个小数位,只需使用浮点数上的格式,尽管pandas默认格式选择通常都是你想要的。如果您使用ipython,请查看value=['A','D'] df[value] = df[value].astype(float) 魔法,它允许您指定浮动的默认格式。

现在,它运作良好:

%precision

现在,所有这些都说,我没有看到你所做的任何问题,这可能是熊猫的一个错误。同时,我会坚持用更简单的方式(浮点数而不是小数),除非你真的有理由使用小数类型,然后问题不会出现。