Panda-Column作为numpy数组的索引

时间:2014-05-14 12:41:34

标签: python numpy pandas

如何使用熊猫行作为numpy数组的索引?说我有

>>> grid = arange(10,20)
>>> df = pd.DataFrame([0,1,1,5], columns=['i'])

我想做

>>> df['j'] = grid[df['i']]
IndexError: unsupported iterator index

实际执行此操作的简洁方法是什么?

更新

确切地说,我想要一个额外的列,其值与第一列包含的索引相对应:df['j'][0] = grid[df['i'][0]]列中的0

预期产出:

index i j 
    0 0 10
    1 1 11
    2 1 11
    3 5 15 

平行案例:Numpy-to-Numpy

只是为了显示想法的来源,在标准的python / numpy中,如果你有

>>> keys = [0, 1, 1, 5]
>>> grid = arange(10,20)
>>> grid[keys]
Out[30]: array([10, 11, 11, 15])

这正是我想要做的。只有我的键没有存储在矢量中,它们才存储在一列中。

1 个答案:

答案 0 :(得分:5)

这是一个numpy bug,表现为pandas 0.13.0 / numpy 1.8.0。

你可以这样做:

In [5]: grid[df['i'].values]
Out[5]: array([0, 1, 1, 5])

In [6]: Series(grid)[df['i']]
Out[6]: 
i
0    0
1    1
1    1
5    5
dtype: int64

这符合您的输出。你可以为一个列分配一个数组,只要数组/列表的长度与框架的相同(否则你将如何对齐它?)

In [14]: grid[keys]
Out[14]: array([10, 11, 11, 15])

In [15]: df['j'] = grid[df['i'].values]


In [17]: df
Out[17]: 
   i   j
0  0  10
1  1  11
2  1  11
3  5  15