首页 > 解决方案 > 根据条件将字典中的值分配给新列

问题描述

这是我的数据框

城市 销售量
圣地亚哥 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'}

标签: pythonpandasdataframe

解决方案


这有点复杂,因为你有列表和字符串,因为值和字符串在技术上是可迭代的,所以区分更烦人。但这里有一个可以让你的 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)

推荐阅读