2014-05-14 3 views
1

numpy 배열의 인덱스로 팬더 행을 어떻게 사용할 수 있습니까? 나는numpy 배열의 인덱스로 팬더 열

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

실제로이 작업을 수행 할 수있는 짧고 깨끗한 방법은 무엇을하고 싶은 나는

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

이 있다고?

업데이트

는 정확히 말하면, 나는 첫 번째 열에 포함 된 인덱스에 해당하는 값이 추가 열을 원하는 :

: 등 열 0

예상 출력 df['j'][0] = grid[df['i'][0]]

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

평행 한 경우 : Numpy-Numpy

아이디어가 어디에서 오는지 당신이 내가 원하는 정확히 무엇

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

이있는 경우

그냥 표준 파이썬/numpy에 표시합니다. 내 키가 벡터에 저장되지 않은 경우에만 열에 저장됩니다.

답변

5

이것은 판다 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 어레이가 인덱스 또는 기타에 대해 알지 못하기 때문에 팬더 (pandas) 구조를 사용하여 numpy 배열로 인덱스하는 것은 실제로 좋은 생각이 아닙니다. – Jeff

+0

시리즈를 원본 데이터 프레임에 추가하고 싶습니다. – FooBar

관련 문제