python - 根据条件将字典中的值分配给新列
问题描述
这是我的数据框
城市 | 销售量 |
---|---|
圣地亚哥 | 500 |
德克萨斯州 | 400 |
内布拉斯加州 | 300 |
澳门 | 200 |
罗马 | 100 |
伦敦 | 50 |
曼彻斯特 | 70 |
我想在最后添加国家,看起来像这样
城市 | 销售量 | 国家 |
---|---|---|
圣地亚哥 | 500 | 我们 |
德克萨斯州 | 400 | 我们 |
内布拉斯加州 | 300 | 我们 |
澳门 | 200 | 香港 |
罗马 | 100 | 意大利 |
伦敦 | 50 | 英国 |
曼彻斯特 | 200 | 英国 |
国家/地区存储在下面的字典中
country={'US':['San Diego','Texas','Nebraska'], 'Hong Kong':'Macau', 'England':['London','Manchester'],'Italy':'Rome'}
解决方案
这有点复杂,因为你有列表和字符串,因为值和字符串在技术上是可迭代的,所以区分更烦人。但这里有一个可以让你的 dict 变平的函数:
def flatten_dict(d):
nd = {}
for k,v in d.items():
# Check if it's a list, if so then iterate through
if ((hasattr(v, '__iter__') and not isinstance(v, str))):
for item in v:
nd[item] = k
else:
nd[v] = k
return nd
d = flatten_dict(country)
#{'San Diego': 'US',
# 'Texas': 'US',
# 'Nebraska': 'US',
# 'Macau': 'Hong Kong',
# 'London': 'England',
# 'Manchester': 'England',
# 'Rome': 'Italy'}
df['Country'] = df['City'].map(d)
推荐阅读
- c# - 如何检测连接请求是否来自现有连接的客户端?
- android - 如何使用背景和图标创建 android drawable xml 状态
(svg) - excel - Excel VBA中的垂直到水平转置
- postgresql - 恢复我从远程转储的 postgres 数据库
- javascript - React - 使用不断变化的道具渲染对象
- docker - 如何编辑 docker-machine 的主目录
- vba - 创建 +1 和 -1 按钮
- c++ - 将文件传递给函数期间的“未定义引用”
- javascript - 将值传递给给定的函数 prop React
- javascript - 使用 Typescript 在 Cypress 测试中动态导入:ChunkLoadError: Loading chunk 1 failed