Как отобразить значение из вложенного словаря в несколько столбцов в фрейме данных или из 3-х столбцов в основной фрейм данных? - PullRequest
0 голосов
/ 11 марта 2020

Например: у меня есть 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)

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Если я правильно понимаю, вы можете использовать:

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

Но имейте в виду, что ваши ключи dict должны быть строками (поэтому str (x), а не x) в противном случае выдает ошибку.

1 голос
/ 11 марта 2020

Для меня решение для секунд работает хорошо - только необходимые числа во вложенных ключах являются строками:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...