【发布时间】:2021-10-20 16:54:32
【问题描述】:
我有一个包含公司信息的 Python 字典,其结构如下:
co_dict = {'0': {'co_name': 'A',
'company_type': 'Public',
'global_name': 'A PARENT',
'sales': '1000'},
'1': {'co_name': 'B',
'company_type': 'Public',
'global_name': 'B PARENT',
'sales': '1000'}}
还有一个看起来像这样的 Pandas 数据框(真正的 df 要长得多):
df = pd.DataFrame({'co-name': ['M','A','B','F'], 'co-number': [1,2,3,4]})
co-name co-number
0 M 1
1 A 2
2 B 3
3 F 4
我想为字典中的每个 df["co-name"] 查找匹配项,并将 "global_name" 和 "sales" 的相应字典值附加到 df 中的新列。当不匹配时,列都应为“n/a”。所以最终的结果应该是这样的:
co-name co-number global_name sales
0 M 1 n/a n/a
1 A 2 A PARENT 1000
2 B 3 B PARENT 2000
3 F 4 n/a n/a
我尝试这样做:
def find_global_name(x):
for key1 in co_dict.keys():
if (x['co-name'] == co_dict[key1]['co_name']):
return co_dict[key1]['global_name']
else:
return "n/a"
df['global_name'] = df.apply(find_global_name, axis=1)
但 for 循环似乎在第一个公司“A”匹配后停止。我一直试图弄清楚为什么会这样。为什么这种方法不起作用?我如何完成这项任务?非常非常感谢您的帮助。
【问题讨论】:
-
对您的代码进行了一些尝试。在找到第一个匹配项后,它会爆发(因为你有一个返回键),所以它不能返回并搜索 B 或任何其他值
标签: python pandas dictionary nested mapping