将pandas数据帧转换为二维数组

时间:2015-09-13 19:59:41

标签: arrays pandas dataframe

我有一个包含三列的数据框。 X,Y和count,其中count是x和y一起出现的出现次数。我的目标是将其从数据帧转换为两个维度的数组,其中X是行的名称,Y是列的名称,计数构成表中的记录。

这可能吗?如果需要,我可以详细说明。

2 个答案:

答案 0 :(得分:5)

要获得与数据透视表相同的结果,您还可以执行groupby操作,然后将其中一列删除:

import numpy as np
import pandas as pd

df = pd.DataFrame({'color': ['red', 'blue', 'black'] * 2, 
                   'vehicle': ['car', 'truck'] * 3, 
                   'value': np.arange(1, 7)})

>>> df
   color  value vehicle
0    red      1     car
1   blue      2   truck
2  black      3     car
3    red      4   truck
4   blue      5     car
5  black      6   truck

>>> df.groupby(['color', 'vehicle']).sum().unstack('vehicle')
         value       
vehicle    car  truck
color                
black        3      6
blue         5      2
red          1      4

答案 1 :(得分:4)

这是一个IPython会话,可以很好地模拟你想要做的事情:

In [17]: import pandas as pd

In [18]: from random import randint

In [19]: x = ['a', 'b', 'c'] * 4

In [20]: y = ['i', 'j', 'k', 'l'] * 3

In [21]: counts = [randint(10, 20) for i in range(12)]

In [22]: df = pd.DataFrame(dict(x=x, y=y, counts=counts))

In [23]: df.head()
Out[23]:
   counts  x  y
0      16  a  i
1      10  b  j
2      16  c  k
3      15  a  l
4      19  b  i

In [24]: df.pivot(index='x', columns='y', values='counts')
Out[24]:
y   i   j   k   l
x
a  16  14  18  15
b  19  10  15  20
c  10  18  16  16

In [25]: df.pivot(index='x', columns='y', values='counts').values
Out[25]:
array([[16, 14, 18, 15],
       [19, 10, 15, 20],
       [10, 18, 16, 16]], dtype=int64)