2012-11-28 109 views
8

我對熊貓很新穎(即少於2天)。但是,我似乎無法找出將兩列與if/else條件組合的正確語法。如何將兩列與Python中的if/else結合起來?

其實,我確實找出了一種使用'zip'的方法。這就是我想要完成的事情,但似乎可能有更有效的方法在熊貓中做到這一點。

爲了完整起見,我有一些預處理怎麼做才能把事情說清楚:

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

我想知道如果records_data ['source'] else records_data ['year']''你能寫'records_data ['year'] = records_data ['source']。 – minopret

+0

不! -------------------------------------------------- ------------------------- ValueError Traceback(最近呼叫的最後一個) in () - ---> 1 x = records_data ['source'] if 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 (套))。也許你可以比我想象得更快。我只是對你的問題感興趣。我不熟悉熊貓。 – minopret

回答

8

也許嘗試np.where

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

感謝您的建議。只是還沒有機會試試這個... – pocketfullofcheese

+0

這太棒了!與熊貓的'.where'不同,這允許我只指定一個標量,它將完成填充該系列本身的骯髒工作。一個人爲的例子:'df ['c'] = np.where(df.a> df.b,1,-1)' – fantabolous

相關問題