10

我对 Pandas 很陌生(即不到 2 天)。但是,我似乎无法找出将两列与 if/else 条件组合的正确语法。

实际上,我确实想出了一种使用“zip”的方法。这是我想要完成的,但似乎在 pandas 中可能有更有效的方法来做到这一点。

为了完整起见,我包括一些我做的预处理以使事情变得清晰:

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

在 pandas >= 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

Perhaps try np.where:

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