10

私はパンダにとても慣れていません(つまり、2日未満)。ただし、2つの列をif/else条件で組み合わせるための正しい構文を理解できないようです。

実際、私は「zip」を使用してそれを行う1つの方法を見つけました。これは私が達成したいことですが、パンダでこれを行うためのより効率的な方法があるようです。

完全を期すために、物事を明確にするために行う前処理をいくつか含めます。

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'])]
4

2 に答える 2

14

パンダ>=0.10.0で試してみてください

df['year'] = df['year'].where(source_years!=0,df['year'])

そして参照してください:

http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-where-method-and-masking

コメントに記載されているように、これは内部でnp.whereを使用します-違いは、パンダがシリーズを出力に揃えることです(たとえば、部分的な更新しか実行できません)

于 2012-11-30T00:01:17.743 に答える
10

おそらくnp.whereを試してください:

import numpy as np
df['year'] = np.where(source_years,source_years,df['year'])
于 2012-11-28T03:13:49.947 に答える