熊猫映射列表的字典?

时间:2021-01-01 05:25:35

标签: python pandas

如果我有一个列表字典,并且我想将列中的值映射/替换为每个项目的键(如果其中一个列表值匹配),我该怎么做?

例如:

   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

基本上,如果值列表中的项目匹配,那么它应该用键替换列的值。如果键的值为空,则该值应保持原样。我试图替换和映射来做到这一点,但似乎它们不是为使用列表字典而设计的。我该怎么做才能完成这项工作?

1 个答案:

答案 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