我对熊猫很新(即不到2天)。但是,我似乎无法找出将两列与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 :(得分:11)
在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
正如评论中所指出的,这个DOES使用np.where - 不同之处在于pandas将系列与输出对齐(例如,你只能进行部分更新)
答案 1 :(得分:8)
也许尝试np.where:
import numpy as np
df['year'] = np.where(source_years,source_years,df['year'])