Foo*_*Bar 1 python numpy pandas
如何使用熊猫行作为numpy数组的索引?说我有
>>> grid = arange(10,20)
>>> df = pd.DataFrame([0,1,1,5], columns=['i'])
Run Code Online (Sandbox Code Playgroud)
我想要做
>>> df['j'] = grid[df['i']]
IndexError: unsupported iterator index
Run Code Online (Sandbox Code Playgroud)
实际执行此操作的简短方法是什么?
更新
确切地说,我想要一个额外的列,其值与第一列包含的索引相对应:df['j'][0] = grid[df['i'][0]]在列0等中
预期产量:
index i j
0 0 10
1 1 11
2 1 11
3 5 15
Run Code Online (Sandbox Code Playgroud)
平行案例:Numpy-to-Numpy
只是为了显示这个想法的来源,在标准的python /中numpy,如果你有
>>> keys = [0, 1, 1, 5]
>>> grid = arange(10,20)
>>> grid[keys]
Out[30]: array([10, 11, 11, 15])
Run Code Online (Sandbox Code Playgroud)
这正是我想要做的.只有我的键没有存储在矢量中,它们才存储在一列中.
这是一个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
Run Code Online (Sandbox Code Playgroud)
这符合您的输出.您可以将数组分配给列,只要数组/列表的长度与帧相同(否则您将如何对齐它?)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |