我有一个数据框,其中三列表示用户可以订阅的三个国家区域。在三列中的每一列中都有一个国家列表(一些国家在所有三列中)
在另一个数据框中,我有一个用户列表和他们所在的国家/地区。
目的是确定用户在哪个区域(如果有),并说明他们是否允许在该国家/地区使用该服务。
df1 包含用户所在的国家和用户订阅的区域,以及其他字段。
df2 包含可用区域和该区域的国家列表以及其他字段。
df1.head()
name alias3 status_y country
Thetis Z1 active Romania
Demis Z1 active No_country
Donis Z1 active Sweden
Rhona Z3 active Germany
Theau Z2 active Bangladesh
df2.head()
Zone 1 Zone 2 Zone 3
ALBANIA ALBANIA ALBANIA
BELGIUM BELGIUM BELGIUM
BULGARIA AUSTRIA AUSTRIA
NaN CROATIA CROATIA
NaN NaN DENMARK
我已经编写了条件,列出了用户订阅的三个区域之一。
我写了选择用户所在国家的值,并检查该国家是否在用户订阅的区域中。
conditions = [
(df1['alias3']=='Z1'),
(df1['alias3']=='Z2'),
(df1['alias3']=='Z3')
]
values = [
df1['country'].str.upper().isin(country_zone['Zone 1']),
df1['country'].str.upper().isin(country_zone['Zone 2']),
df1['country'].str.upper().isin(country_zone['Zone 3'])
]
df1['valid_country'] = np.select(conditions, values)
有没有更好的方法在熊猫中做到这一点?