我是熊猫的新手,正在尝试从numpy数组创建数据透视表。
变量npArray
就是一个numpy数组:
>>> npArray
array([(1, 3), (4, 3), (1, 3), ..., (1, 4), (1, 12), (1, 12)],
dtype=[('MATERIAL', '<i4'), ('DIVISION', '<i4')])
我将通过划分来计数每种材料的出现,其中划分是行,材料是列。示例:
我所拥有的:
#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]
任何帮助将不胜感激。
答案 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")