如何将值从嵌套字典映射到dataframe中的多列,或从3列dataframe映射到主dataframe?

2024-09-25 14:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:我有这样的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)

Tags: iniddffor字典statuscountrydict
2条回答

对于me 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),否则会引发错误

相关问题 更多 >