Преобразование кадра данных Pandas в словарь - PullRequest
0 голосов
/ 14 октября 2018

У меня есть дата Pandas:

+-----------+-------+---------+
| kpi_name  | coeff | measure |
+-----------+-------+---------+
| messi     | 2     | DoD     |
| ronaldo   | 1.5   | MTD     |
| del_piero | 2     | MTD     |
+-----------+-------+---------+

Мне нужно преобразовать это в словарь, например:

{'MTD':[{'KPI':'ronaldo', 'measure':'1.5'}, {'KPI:':'messi', 'measure':'2'],
 'DoD':['KPI':'messi', 'measure':'1.4']}

Я пытаюсь:

a = df.groupby('measure').apply(lambda x: x.to_dict('list')).to_dict() 

Мой вывод:

{'MTD': {'kpi_name': ['ronaldo', 'del_piero'], 'coeff': [1.5, 2.0], 'measure': ['MTD', 'MTD']}, 'DoD': {'kpi_name': ['messi'], 'coeff': [2.0], 'measure': ['DoD']}}

Огромная помощь!

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Использование словарного понимания с GroupBy:

df = pd.DataFrame({'kpi_name': ['messi', 'ronaldo', 'del_piero'],
                   'coeff': [2, 1.5, 2],
                   'measure': ['DoD', 'MTD', 'MTD']})

res = {k: grp.to_dict(orient='records') for k, grp in df.groupby('measure')}

print(res)

{'DoD': [{'kpi_name': 'messi', 'coeff': 2.0, 'measure': 'DoD'}],
 'MTD': [{'kpi_name': 'ronaldo', 'coeff': 1.5, 'measure': 'MTD'},
         {'kpi_name': 'del_piero', 'coeff': 2.0, 'measure': 'MTD'}]}
0 голосов
/ 14 октября 2018

Пожалуйста, посмотрите на разделение фреймов данных и транспонирования T для дальнейшего использования.

Для данного фрейма данных

df = pd.DataFrame({'KPI':['messi', 'ronaldo', 'del_piero'],\
                   'coeff':[2, 1.5, 2], \
                   'measure':['DoD', 'MTD', 'MTD']})

Вы можете использоватьследующая лямбда-функция

df.groupby('measure').apply(lambda x: list(x[['KPI','coeff']].T.to_dict().values())).to_dict()

Для достижения ожидаемого результата

{'DoD': [{'KPI': 'messi', 'coeff': 2.0}],
 'MTD': [{'KPI': 'ronaldo', 'coeff': 1.5}, {'KPI': 'del_piero', 'coeff': 2.0}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...