2012-11-28 11 views
8

Jestem bardzo nowy w Pandach (to znaczy w mniej niż 2 dni). Jednak nie mogę znaleźć odpowiedniej składni do łączenia dwóch kolumn z warunkiem if/else.jak połączyć dwie kolumny z pandami if/else w Pythonie?

Właściwie, wymyśliłem jeden sposób, aby to zrobić za pomocą "zip". To jest to, co chcę osiągnąć, ale wydaje się, że w pandach może być skuteczniejszy sposób.

Przez wzgląd na kompletność, I obejmują pewne wstępne przetwarzanie zrobić, aby było jasne:

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 Zastanawiam się, czy możesz napisać 'records_data ['year'] = records_data ['source'] jeśli records_data ['source'] else records_data ['year']'. – minopret

+0

nie! -------------------------------------------------- ------------------------- Traceback wartości ValueError (ostatnie ostatnie połączenie) w () - ---> 1 x = records_data ['source'] if records_data ['source'] else records_data ['year'] ValueError: Wartość prawdy tablicy z więcej niż jednym elementem jest niejednoznaczna. Użyj a.any() lub a.all() – pocketfullofcheese

+0

szukam [Łączenie zachodzących na siebie zestawów danych] (http://pandas.pydata.org/pandas-docs/stable/basics.html#combining-overlapping-data -zestawy). Może uda ci się to odkryć szybciej niż ja. Zaintrygowało mnie tylko twoje pytanie. Nie znam Pandy. – minopret

Odpowiedz

8

Może spróbuj np.where:

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

dzięki za sugestię. po prostu nie miałem okazji spróbować tego jeszcze ... – pocketfullofcheese

+0

To jest świetne! W przeciwieństwie do pandy ".where" pozwala mi to określić tylko skalar i wykona brudną pracę wypełniania samej serii. Zmyślny przykład: 'df ['c'] = np.where (df.a> df.b, 1, -1)' – fantabolous

Powiązane problemy