来自字典的 pandas DataFrame 的错误列映射

Wrong column mapping of pandas DataFrame from dictionary

我正在尝试映射 2 个数据帧

L1

ship  city   code  

 NaN   aa      12    
 NaN   bb      23    
 NaN   cc      13    
 NaN   dd      43  

B1

 ship  city    
 
 21     dd     
 32     bb      
 43     aa      
 654    cc      
 34     bb     
 54     aa

 

我想将 code 列从 L1 映射到 B1。我尝试使用字典进行映射,所以我会得到这样的结果

Expected_Result =

ship  city   code  
 
 21    dd      43    
 32    bb      23    
 43    aa      12    
 654   cc      13    
 34    bb      23    
 54    aa      12



 code_dict = dict(zip(L1['city'],L1['code'])) 
 B1['code'] = L1['city'].map(code_dict)
 print(B1)

我得到的结果不是我所期望的。

请帮我解决这个问题。

 ship  city    code  
 
 21    dd       12    
 32    bb       23    
 43    aa       13    
 654   cc       43    
 34    bb       NaN   
 54    aa       NaN 

我想你正在寻找:

from pandas import DataFrame


df1 = DataFrame([
    {'city': 'aa', 'code': 12},
    {'city': 'bb', 'code': 23},
    {'city': 'cc', 'code': 13},
    {'city': 'dd', 'code': 43}
])

df2 = DataFrame([
    {'ship': '21', 'city': 'dd'},
    {'ship': '32', 'city': 'bb'},
    {'ship': '43', 'city': 'aa'},
    {'ship': '654', 'city': 'cc'},
    {'ship': '34', 'city': 'bb'},
    {'ship': '54', 'city': 'aa'}
])

expected_result = df2.merge(df1, on='city')
print(expected_result)

结果:

  ship city  code
0   21   dd    43
1   32   bb    23
2   34   bb    23
3   43   aa    12
4   54   aa    12
5  654   cc    13

两个选项。

数据设置:

ship=[np.nan]*4
city=['aa','bb','cc','ddd']
code=[12,23,13,43]

ship2=[21,32,43,654,34,54]
city2=['dd','bb','aa','cc','bb','aa']

l1=pd.DataFrame({"ship":ship,"city":city,"code":code})
b1=pd.DataFrame({"ship":ship2,"city":city2})

第 1 到 合并 城市:

l1.merge(b1,on=['city'],how='inner')[['ship_y','city','code']].rename({"ship_y":"ship"},axis=1)

第二次使用map/dictionary:

ship_city_d = dict(zip(l1.city, l1.code)) # build the dictionary
b1['code']=b1['city'].apply(lambda x: str(ship_city_d.get(x,"Not Found")) )

注意:如果找不到密钥,b1 将有一些条目,如果不需要,您可以删除这些记录作为下一步。