1 回答

TA贡献1806条经验 获得超8个赞
创建用于可读代码,链由单独的行,每行的条件|或&按位OR或AND对最终掩模和通到numpy.where:
m1 = (df['Zone'] == "EU")|(df['New_Zone'].isin(['Europe','EUROPE','EU'])
m2 = (df["Contract - Original Currency Code"] == "EUR")
m3 = (df['Region'] == "Australia")|(df['New_Region'] =='Australia')
m4 = (df["Contract - Original Currency Code"] == "AUD")
m5 = (df['Region'] == "Brazil")|(df['New_Region'] =='Brazil')
m6 = (df["Contract - Original Currency Code"] == "BLR")
mask = (m1 & m2) | (m3 & m4) | (m5 & m6)
df['Currency_Match'] = np.where(mask, "Yes", 'No')
编辑:对于动态解决方案,使用区域和区域列表按货币创建字典并传递给logical_or.reducein dict comprehension:
#zone dict
d1 = {'EUR':['Europe','EUROPE','EU'],'NGN':['Africa','AFRICA'],'USD':['NAZ']}
#region dict
d2 = {'AUD':['Australia'], 'BLR':['Brazil'],'KRW':['Korea'],'RUB':['Russia','Ukraine']}
m1 = [(df['Zone'].isin(v) | df['New_Zone'].isin(v)) &
(df["Contract - Original Currency Code"] == k)
for k, v in d1.items()]
print (m1)
m2 = [(df['Region'].isin(v) | df['New_Region'].isin(v)) &
(df["Contract - Original Currency Code"] == k)
for k, v in d2.items()]
print (m2)
mask = np.logical_or.reduce(m1) | np.logical_or.reduce(m2)
df['Currency_Match'] = np.where(mask, "Yes", 'No')
添加回答
举报