如何将值从嵌套字典映射到数据框中的多列或从三列数据框映射到主数据框?

时间:2020-03-11 08:17:33

标签: python pandas dataframe dictionary

例如:我有这样的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列,而且我不确定如何处理多个列。

我也尝试过用replace代替但不起作用。

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

2 个答案:

答案 0 :(得分:1)

对我来说,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

答案 1 :(得分:1)

如果我正确理解,可以使用:

    for k in d_dict.keys():
        df[k] = df[k].apply(lambda x: d_dict[k][str(x)])

但是请注意,您的字典键必须是字符串(因此str(x)而不是x),否则会引发错误。