2014-05-14 81 views
1

如何使用熊貓行作爲numpy數組的索引?說我有熊貓列作爲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]) 

這正是我想做的事情。只有我的密鑰不存儲在一個向量中,它們存儲在一個列中。

回答

5

這是一個nandy的bug,浮出水面熊貓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 
+0

因爲我真的不明白這裏應用的邏輯:我將如何影響索引?現在這個'df ['i']'有一個索引,但我希望它具有'df'的索引。 – FooBar

+0

你想做什麼?它不是一個好主意,使用熊貓結構索引到一個numpy數組,因爲numpy數組不知道索引或任何東西。 – Jeff

+0

我想將該系列添加到原始數據框。 – FooBar