2012-11-28 46 views
8

Tôi rất mới đối với Pandas (tức là, dưới 2 ngày). Tuy nhiên, tôi dường như không thể tìm ra cú pháp đúng để kết hợp hai cột với điều kiện if/else.làm thế nào để kết hợp hai cột với một if/else trong pandas python?

Thực ra, tôi đã tìm ra một cách để thực hiện việc đó bằng cách sử dụng 'zip'. Đây là những gì tôi muốn thực hiện, nhưng có vẻ như có một cách hiệu quả hơn để làm điều này trong gấu trúc.

Đối với đầy đủ sake, tôi bao gồm một số tiền xử lý tôi làm gì để làm cho mọi việc rõ ràng:

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

tôi tự hỏi liệu bạn có thể viết 'records_data ['year'] = records_data ['source'] nếu records_data ['source'] else records_data ['year']'. – minopret

+0

không! -------------------------------------------------- ------------------------- ValueError Traceback (cuộc gọi gần đây nhất) trong () - ---> 1 x = records_data ['source'] nếu records_data ['source'] else records_data ['year'] ValueError: Giá trị thực của một mảng có nhiều phần tử không rõ ràng. Sử dụng a.any() hoặc a.all() – pocketfullofcheese

+0

Tôi đang xem [Kết hợp tập hợp dữ liệu chồng chéo] (http://pandas.pydata.org/pandas-docs/stable/basics.html#combining-overlapping-data -sets). Có lẽ bạn có thể hình dung ra nhanh hơn tôi có thể. Tôi chỉ bị hấp dẫn bởi câu hỏi của bạn. Tôi không quen với Pandas. – minopret

Trả lời

8

Có lẽ thử np.where:

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

cảm ơn đề xuất. chỉ chưa có cơ hội để thử cái này ... – pocketfullofcheese

+0

Điều này thật tuyệt! Không giống như gấu trúc '.. Where' điều này cho phép tôi chỉ định một vô hướng và nó sẽ làm công việc dơ bẩn của việc lấp đầy trong chính nó. Một ví dụ giả tạo: 'df ['c'] = np.where (df.a> df.b, 1, -1)' – fantabolous

Các vấn đề liên quan