2013-03-06 5 views
3

표현식의 결과를 데이터 프레임에 브로드 캐스트하려고하지만 전체 열에는 필터링 된 하위 집합으로 브로드 캐스트하지 않습니다. 아래의 단순화 :팬더 데이터 프레임에서 필터링 된 열에 스칼라를 브로드 캐스팅하는 방법

In [6]: df1 = DataFrame({"A":[1, 2, 3, 4], "B":["w", "x", "y", "z"], "C":(numpy. 
zeros((4), dtype='S1'))}) 

In [7]: df1 
Out[7]: 
    A B C 
0 1 w 
1 2 x 
2 3 y 
3 4 z 

그래서 A와 B는 내 기존 데이터를 포함하고 C 열은 결과를 입력 할 준비가되었습니다. 그래서 다음과 같이 전체 열을 방송 할 수있다 :

In [9]: df1['C'] = 'H' 

In [10]: df1 
Out[10]: 
    A B C 
0 1 w H 
1 2 x H 
2 3 y H 
3 4 z H 

그러나 나는 시도하고 방송하는 경우 (이 예에서는 문자 "R") 필터링 된 하위 집합 :

In [14]: (df1[df1['A'] > 2])['C'] 
Out[14]: 
2 H 
3 H 
Name: C 

(단지로 .. 그래서 지금은 시도하고이 부분 집합에 "R"를 지정)

In [12]: (df1[df1['A'] > 2])['C'] = "R" 

In [13]: df1 
Out[13]: 
    A B C 
0 1 w H 
1 2 x H 
2 3 y H 
3 4 z H 

를 필터링 작품을 증명하지만 내 값은 다시 주요 변경되지 않은 :((흥미롭게도 나는 오류가 발생하지 않습니다!?) 아무도 내가 이것을 얻을 수있는 방법을 제안 할 수 있습니까?

많은 감사,

답변

4

먼저 열을 선택한 다음 필터 :

df1['C'][df1['A'] > 2] = "R" 

    A B C 
0 1 w H 
1 2 x H 
2 3 y R 
3 4 z R 
+0

Ahhh !!! 오 너무 간단합니다 :-) 감사합니다 ..... –

1

을 그냥 말과 같이

In [8]: In [12]: (df1[df1['A'] > 2])['C'] = "R" 
/Users/tismer/anaconda/bin/ipython:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 
    #!/bin/bash /Users/tismer/anaconda/bin/python.app 

: 팬더 멋지게이 경우에 경고를 줄 수 있도록 개선되었다 click to read the pandas link from above

관련 문제