如何将值从嵌套字典映射到数据帧中的多列或从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)

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

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

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

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

最新更新