首页 > 解决方案 > 如何将嵌套字典中的值映射到数据框中的多列或从 3 列数据框映射到主数据框?

问题描述

例如:我有这样的df:

id      Status         Country       Income
1          4               2          3
2          5               3          2 

和这样的字典:

d_dict = {Status : { '4':'Married', '5':'UnMarried'},
        Country: { '2': 'Japan' , '3': 'China'},
        Income: {'3': "5000-10000", 2: "11000-20000"}}

我想根据嵌套字典映射值。我可以为这样的一列做:

for k,v in d_dict.items():
    max_d[k] = max(v, key=v.get)
df['Status'] = df['Status'].map(max_d)

但是我有超过 2000 列,我不确定如何处理多个列。

我也尝试过替换但不工作。

df=df.astype(str).replace(d_dict)

标签: pythonpandasdataframedictionary

解决方案


对我来说,secons 解决方案效果很好 - 嵌套键中只有必要的数字是字符串:

d_dict = {'Status' : { '4':'Married', '5':'UnMarried'},
        'Country': { '2': 'Japan' , '3': 'China'},
        'Income': {'3': "5000-10000", '2': "11000-20000"}}


df = df.astype(str).replace(d_dict)
print (df)
  id     Status Country       Income
0  1    Married   Japan   5000-10000
1  2  UnMarried   China  11000-20000

因此,您可以尝试将嵌套键转换为字符串:

d_dict = {'Status' : { '4':'Married', '5':'UnMarried'},
        'Country': { '2': 'Japan' , '3': 'China'},
        'Income': {3: "5000-10000", 2: "11000-20000"}}

d_dict = {k: {str(k1): v1 for k1, v1 in v.items()} for k,v in d_dict.items()}

df = df.astype(str).replace(d_dict)
print (df)
  id     Status Country       Income
0  1    Married   Japan   5000-10000
1  2  UnMarried   China  11000-20000

或将所有键转换为整数:

d_dict = {k: {int(k1): v1 for k1, v1 in v.items()} for k,v in d_dict.items()}

df = df.replace(d_dict)
print (df)
   id     Status Country       Income
0   1    Married   Japan   5000-10000
1   2  UnMarried   China  11000-20000

推荐阅读