首页 > 解决方案 > 如果键在“值”中,则将值映射到列

问题描述

我有一个字典

{'Spain':'34',
'Chile':'56',
'China':861'}

还有一个熊猫数据框:

| id | phone |
--------------
|  1 | 343123|
|  2 | 111111|
|  3 | 861231|
|  4 | 86911 |
|  5 | 56441 |

如果“电话”以该值开头,我想将字典映射到一个新列。

| id | phone | country |
------------------------
|  1 | 343123|   Spain |
|  2 | 111111|   None  |
|  3 | 861231|   China |
|  4 | 86911 |   None  |
|  5 | 56441 |   Chile |

相关的; 字典顺序可以颠倒

标签: pythonpandasdata-mining

解决方案


你可以这样做:

lookup = {'Spain': '34',
          'Chile': '56',
          'China': '861'}

reverse = { v: k  for k, v in lookup.items()}

df['country'] = df['phone'].astype(str)\
    .str.extract(fr'^({"|".join(reverse.keys())})')\
    .squeeze().map(reverse)
print(df)

输出

   id   phone country
0   1  343123   Spain
1   2  111111     NaN
2   3  861231   China
3   4   86911     NaN
4   5   56441   Chile

推荐阅读