сгруппировать по одному столбцу и преобразовать оставшиеся столбцы в словарь - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть такой фрейм данных

import pandas as pd

df = pd.DataFrame({'keyid': ['d1', 'd1', 'd2', 'd2'],
                   'keys': ['key1', 'key2', 'key1', 'key2'],
                   'vals': ['val1', 'val2', 'val3', 'val4']})

  keyid  keys  vals
0    d1  key1  val1
1    d1  key2  val2
2    d2  key1  val3
3    d2  key2  val4

, который я хочу преобразовать в

{'d1': {'key1': 'val1', 'key2': 'val2'},
 'd2': {'key1': 'val3', 'key2': 'val4'}}

Ближайшее, что я получил:

print(df.groupby('keyid')['keys', 'vals'].apply(lambda g: g.to_dict(orient='records')).to_dict())

, которое печатает

'd1': [{'keys': 'key1', 'vals': 'val1'}, {'keys': 'key2', 'vals': 'val2'}],
'd2': [{'keys': 'key1', 'vals': 'val3'}, {'keys': 'key2', 'vals': 'val4'}]}

Теперь я могу изменить этот словарь дальше, но есть ли более простой способ сделать это?

1 Ответ

0 голосов
/ 20 декабря 2018

Вы близки, нужен только словарь в apply с dict и values:

print(df.groupby('keyid')['keys', 'vals'].apply(lambda x: dict(x.values)).to_dict())
{'d1': {'key1': 'val1', 'key2': 'val2'}, 
 'd2': {'key1': 'val3', 'key2': 'val4'}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...