python - 如果键在“值”中,则将值映射到列
问题描述
我有一个字典
{'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 |
相关的; 字典顺序可以颠倒
解决方案
你可以这样做:
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
推荐阅读
- couchdb - POS应用的CouchDB设计
- server - mod_deflate 不适用于 Apache 2.4.37
- sql - 如何有一个好的日期格式?
- javascript - 如何以 24 小时格式向格式化为 HH:MM:SS 的字符串添加小时数
- ruby-on-rails - psql:致命:抱歉,已经有太多客户了,HEROKU
- c++ - Xcode 找不到目标文件
- javascript - 从 Object 属性在 Canvas 上绘制图像
- laravel - Twitter API 应用程序,不显示图片或视频
- c# - ElasticSearch Nest BulkAll 在收到无法从 _bulk 重试的故障后停止
- svg - Amcharts v4 自定义 SVG