2012-11-28 7 views
8

私はPandasにとって非常に新しいです(つまり、2日以内)。しかし、2つの列をif/else条件と組み合わせるための正しい構文を理解できないようです。python pandasのif/elseと2つの列を結合する方法は?

実際には、私は '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

I(ですから、例えばあなたが部分的にしか更新を行うことができます) records_data ['year'] = records_data ['source']ならrecords_data ['source'] else records_data ['year'] 'と書くことができますか? – minopret

+0

-------------------------------------------------- ------------------------- ValueErrorトレースバック(直前の最後のコール) in () - RecordEdit ['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

おそらくnp.whereを試してみてください:パンダで

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

関連する問題