2012-11-28 2 views
8

나는 판다 (팬더)에 대해 매우 새롭다 (즉, 2 일 이내). 그러나 두 열을 if/else 조건과 결합하는 올바른 구문을 파악할 수 없습니다.python pandas에서 if/else와 두 개의 열을 결합하는 방법은 무엇입니까?

실제로 'zip'을 사용하여 한 가지 방법을 찾아 냈습니다. 이것은 내가 성취하고자하는 것이지만, 판다에서 이것을하는 더 효율적인 방법이있을 것 같습니다. 아마도 np.where을 시도

records_data = pd.read_csv(open('records.csv')) 

## pull out a year from column using a regex 
source_years = records_data['source'].map(extract_year_from_source) 

## this is what I want to do more efficiently (if its possible) 
records_data['year'] = [s if s else y for (s,y) in zip(source_years, records_data['year'])] 
+0

I (그래서 예를 들어, 당신은 단지 부분적인 갱신을 수행 할 수 있습니다) records_data [ 'year'] = records_data [ 'source']라면 records_data [ 'source'] else records_data [ 'year']'라고 쓸 수 있는지 궁금합니다. – minopret

+0

아니요! -------------------------------------------------- ------------------------- ValueError 추적 (가장 최근의 마지막 통화) in () - ---> 1 x = records_data [ 'source'] records_data [ 'source'] else records_data [ 'year'] ValueError : 둘 이상의 요소가있는 배열의 진리 값이 모호합니다. a.any() 또는 a.all() 사용 – pocketfullofcheese

+0

[겹치는 데이터 세트 결합] (http://pandas.pydata.org/pandas-docs/stable/basics.html#combining-overlapping-data)을보고 있습니다. -sets). 어쩌면 내가 할 수있는 것보다 빨리 그걸 알아낼 수있을거야. 나는 단지 당신의 질문에 흥미가있었습니다. 나는 팬더와 친숙하지 않다. – minopret

답변

8

을 : 완성도를 위해서

, 난 분명 일을 만들기 위해 할 몇 가지 전처리를 포함 팬더에서

import numpy as np 
df['year'] = np.where(source_years,source_years,df['year']) 
+0

제안에 감사드립니다. 이 기회를 아직 시도 할 기회가 없었습니다 ... – pocketfullofcheese

+0

대단하군요! pandas의'.where'와 달리 이것은 스칼라 만 지정하고 시리즈 자체를 작성하는 더러운 작업을 수행합니다. 고안된 예제 :'df [ 'c'] = np.where (df.a> df.b, 1, -1)' – fantabolous

관련 문제