如果我有一个列表字典,并且我想将列中的值映射/替换为每个项目的键(如果其中一个列表值匹配),我该怎么做?
例如:
MappingDict = {
'argenx SE': ['argenx SE',
'Argenx SE',
'ARGENX SE',
'ARGENX SE NV',
'ARGENX SE COMMON STOCK',
'ARGENX SE ARGX',
'argenx SE ADR'],
'Arête Industries, Inc': [],
'Ares Management Corporation': ['Ares Management Corporation',
'Ares Management Corporation 7 % Non-Cum Pfd Registered Shs Series A'],
'Alexandria Real Estate Equities, Inc': ['Alexandria Real Estate Equities, Inc',
'Alexandria Real Estate Equities Inc 3.45 04/30/2025',
'Alexandria Real Estate Equities Inc-3.45%-4-30-2025']
}
我有看起来像这样的数据框
df['Name']:
Name
Alexandria Real Estate Equities Inc 3.45 04/30/2025
ARGENX SE NV
Arête Industries, Inc
我希望它的结果是:
df['Name']:
Name
Alexandria Real Estate Equities, Inc
argenx SE
Arête Industries, Inc
基本上,如果值列表中的项目匹配,那么它应该用键替换列的值。如果键的值为空,则该值应保持原样。我试图替换和映射来做到这一点,但似乎它们不是为使用列表字典而设计的。我该怎么做才能完成这项工作?
答案 0 :(得分:5)
让我们尝试explode
然后replace
s = pd.Series(MappingDict).explode()
df['name_new'] = df.Name.replace(dict(zip(s,s.index)))
df
Name name_new
0 Alexandria Real Estate Equities Inc 3.45 04/30... Alexandria Real Estate Equities, Inc
1 ARGENX SE NV argenx SE
2 Arête Industries, Inc Arête Industries, Inc