python - 如果列值为“foo”,则在同一行上附加具有新值的数据框?
问题描述
我有一个包含国家名称的数据框,我想将其附加到每个国家/地区首都的坐标。
我创建了一个包含所有坐标的字典,其格式如下:
{'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773),
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}
我有一个数据框,其中有一列是“COUNTRY”,并且希望有两个新列“LAT”、“LON”,我将在其中存储坐标。我尝试将 dict 直接转换为数据框,但它没有按我想要的那样工作。
是否可行创建一个带有两列“LAT”,“LON”的空df,将其与原始df合并然后遍历它,检查国家并一一添加坐标,或者有更好的方法吗? ?
一个国家可以在 df 中出现很多次,大约有 30k 个条目,所以我担心它会造成一些开销。我是 Pandas 的新手,所以我可能会缺少一个可以很好地使用它的内置功能。
您对解决此问题的最佳方法有任何想法吗?
提前致谢
解决方案
[0]
使用 2 dict comprehensions 通过索引和[1]
with选择元组的第一个和第二个值map
:
d = {'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773),
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}
df = pd.DataFrame({'COUNTRY':['Zimbabwe','Hungary', 'Slovakia']})
df['LAT'] = df['COUNTRY'].map({k:v[0] for k, v in d.items()})
df['LON'] = df['COUNTRY'].map({k:v[1] for k, v in d.items()})
print (df)
COUNTRY LAT LON
0 Zimbabwe 31.045686 -17.831773
1 Hungary 19.040471 47.498382
2 Slovakia NaN NaN
推荐阅读
- typescript - 如何通过值获取 Typescript 字典中的键?
- python-3.x - 如何在 html 代码中找到文本区域并使用 Selenium 在 Python 中修改标签内的文本
- c# - asp.net类库中的Webforms
- excel - 数组重复问题
- java - 在 Spring 批处理中将属性注入 FlatFileItemWriter
- ruby-on-rails - 使用 .deliver_later 发送电子邮件时出现序列化错误
- google-bigquery - 如何修复 BigQuery 中缓慢的 _TABLE_SUFFIX 查询?
- java - 独立应用程序要求最终用户输入一些详细信息
- linux - 用于杀死早于 x 时间的进程的 Bash 脚本 - 表达式中的语法错误
- javascript - 电子邮件验证功能无法与表单按钮一起正常工作