来自字典的 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 将有一些条目,如果不需要,您可以删除这些记录作为下一步。
我正在尝试映射 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 将有一些条目,如果不需要,您可以删除这些记录作为下一步。