Pandas 当存在';s与另一个dataframe列中的列表项匹配

Pandas 当存在';s与另一个dataframe列中的列表项匹配,pandas,dataframe,nan,Pandas,Dataframe,Nan,这里是Python初学者。 我已经尝试从很多网站上寻找解决方案。 可能只是没有正确地连接点 我试图根据列表中的值在数据帧中填充“NaN”值。 如果人员姓名出现在列表上,“地理位置”列应更新为正确的地理位置名称。 列表是完整的,区域中有人,但数据帧不是,需要更新 我得到的大致如下: name geo 0 john EMEA 1 jack NaN 2 jill APAC 3 james NaN 4 judy EMEA 5 jared NaN 我想根据以下列表更新Na

这里是Python初学者。 我已经尝试从很多网站上寻找解决方案。 可能只是没有正确地连接点

我试图根据列表中的值在数据帧中填充“NaN”值。 如果人员姓名出现在列表上,“地理位置”列应更新为正确的地理位置名称。 列表是完整的,区域中有人,但数据帧不是,需要更新

我得到的大致如下:

   name  geo 
0  john  EMEA
1  jack  NaN
2  jill  APAC
3  james NaN 
4  judy  EMEA
5  jared NaN
我想根据以下列表更新NaN值

EMEA = ['john','jack','judy','jared']
APAC = ['jill','james']

首先通过每个列表创建字典:

EMEA = ['john','jack','judy','jared']
APAC = ['jill','james']

d = {'EMEA' : EMEA,
     'APAC': APAC}
然后用展平交换订单:

d1 = {x: k for k, v in d.items() for x in v}
print (d1)
{'john': 'EMEA', 'jack': 'EMEA', 'judy': 'EMEA',
 'jared': 'EMEA', 'jill': 'APAC', 'james': 'APAC'}
上一次仅将missing值替换为映射值by和:

或映射所有值:

df['geo'] = df['name'].map(d1)
print (df)
    name   geo
0   john  EMEA
1   jack  EMEA
2   jill  APAC
3  james  APAC
4   judy  EMEA
5  jared  EMEA

一个简单的np.where应该解决这个问题:

试试这个:

for x in df.index:
    if df.loc[x,"name"] in EMEA:
        df.loc[x,"geo"]='EMEA'
    if df.loc[x,"name"] in APAC:
        df.loc[x,"geo"]="APAC"
希望这有帮助。祝你好运

df['geo'] = np.where((df['geo'].isnull()) & (df['name'].isin(MEA)), 'MEA',
            np.where((df['geo'].isnull()) & (df['name'].isin(APAC)), 'APAC',
                      pdf['geo']))
for x in df.index:
    if df.loc[x,"name"] in EMEA:
        df.loc[x,"geo"]='EMEA'
    if df.loc[x,"name"] in APAC:
        df.loc[x,"geo"]="APAC"