numpy数组到熊猫数据透视表

时间:2018-07-12 22:59:24

标签: python-2.7 pandas numpy

我是熊猫的新手,正在尝试从numpy数组创建数据透视表。

变量npArray就是一个numpy数组:

>>> npArray
array([(1, 3), (4, 3), (1, 3), ..., (1, 4), (1, 12), (1, 12)], 
      dtype=[('MATERIAL', '<i4'), ('DIVISION', '<i4')])

我将通过划分来计数每种材料的出现,其中划分是行,材料是列。示例:

enter image description here

我所拥有的:

#numpy array to pandas data frame
pandaDf = pandas.DataFrame (npArray)

#pivot table - guessing here
pandas.pivot_table (pandaDf, index = "DIVISION", 
                    columns = "MATERIAL", 
                    aggfunc = numpy.sum) #<--- want count, not sum

结果:

Empty DataFrame
Columns: []
Index: []

pandaDf的示例:

>>> print pandaDf
         MATERIAL  DIVISION
0               1         3
1               4         3
2               1         3
3               1         3
4               1         3
5               1         3
6               1         3
7               1         3
8               1         3
9               1         3
10              1         3
11              1         3
12              4         3
...           ...       ...
3845291         1         4
3845292         1         4
3845293         1         4
3845294         1        12
3845295         1        12

[3845296 rows x 2 columns]

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

已经有人提出类似的要求:https://stackoverflow.com/a/12862196/9754169

底线,只需执行aggfunc=lambda x: len(x)

答案 1 :(得分:1)

@GerardoFlores是正确的。我发现的另一个解决方案是为频率添加一列。

#numpy array to pandas data frame
pandaDf = pandas.DataFrame (npArray)

print "adding frequency column"
pandaDf ["FREQ"] = 1

#pivot table
pivot = pandas.pivot_table (pandaDf, values = "FREQ", 
                            index = "DIVISION", columns = "MATERIAL", 
                            aggfunc = "count")