2014-10-21 3 views
1

I는 dataframe 함유 다음 열 가지고 데이터는 행이되도록 구성되어논리 테스트에 기초 팬더 dataframe 열을 생성

amount1 - a numeric value 
amount2 - a different numeric value 
ccy1 - a 3-char currency code 
ccy2 - a different 3-char currency code 

어디 튜플 (amount1, ccy1, AMOUNT2, ccy2) 튜플 (amount2, ccy2, amount1, ccy1)으로 구성된 다른 행과 정확히 일치합니다.

원하는 작업은 데이터 프레임을 두 개로 분할하는 것입니다. df1에서 ccy1> = ccy2 (알파벳 순으로 정렬)에 해당 행을 포함시키고 df2에 cc1 < ccy2 행을 포함 시키려합니다.

나는 분할 않는 간단한 함수 작성 :

def splitfunctest(s1, s2): 
    if s1 > s2: 
     return 'BIG' 
    else: 
     return 'SMALL' 

을하지만 노력하고 나의 새로운 컬럼에 적용하는 데 문제가 있어요 :

df['splitter'] = splitfunctest(df['ccy1'], df['ccy2']) 

을하지만, 얻을 :

Traceback (most recent call last): File "", line 1, in File "", line 2, in splitfunctest ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

그래서 함수가 각 필드 패스의 전체 내용을 평가하려고 시도하고 있음을 알 수 있습니다. 에드가 그렇습니다. 어떻게 원자 적으로 기능을 발휘할 수 있습니까? - 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

이 시도 :

df1 = df[df['ccy1'] >= df['ccy2']] 
df2 = df[df['ccy1'] < df['ccy2']] 
+0

멋지게 고맙다 작동! 함수의 결과를 열에 쓰는 더 넓은 문제에 대해 표준 연습이나이를 수행하는 일반적인 방법이 있습니까? –

+1

나는 또한 "LOC"명령의 사용을 찾을 단지 수 있었다 - 다시 꽤 내가하고 싶은하지만 : '코드 DF [SPLITTER '] = "없음"
df.loc [(. 'SPLITTER'] = '빅' df.loc [(df [ 'ccy1'] = df [ 'ccy2' = 'SMALL' 이상적으로는 필자가 일렬로 된 작업을 열/열 이름을 매개 변수로 사용하는 별도로 정의 된 함수로 추상화 할 수있게 해주는 한 줄짜리 코드가 필요합니다. –

+0

df [ 'SPLITTER'] = df.apply (람다 시리즈 : '[ccy1']> series [= ccy2 '] else의 경우'BIG '를 사용하면'df.apply'를 사용하는 것이 좋습니다. 'small', axis = 1)' – suzanshakya