Dataframe в словарь сгруппирован, а ключи / значения - другие столбцы - PullRequest
0 голосов
/ 06 августа 2020

Поддержите меня на bs, друзья. У меня есть такой фрейм данных:

+-------+--------------------------+------+-------+------+
| index |                specialty | code | count | rank |
+-------+--------------------------+------+-------+------+
| 19    | Colon and Rectal Surgery | 1557 | 36    | 5.0  |
+-------+--------------------------+------+-------+------+
| 22    | Surgical Oncology        | 1557 | 22    | 14.0 |
+-------+--------------------------+------+-------+------+
| 147   | Hematology               | 2057 | 383   | 13.0 |
+-------+--------------------------+------+-------+------+
| 753   | Oncology                 | 1578 | 74    | 15.0 |
+-------+--------------------------+------+-------+------+
| 1089  | Dental General Practice  | 1257 | 6     | 2.5  |
+-------+--------------------------+------+-------+------+

Есть несколько записей для каждой специальности - ie У меня есть количество и ранг кодов для специальности X до 25-го ранга.

I Я пытаюсь использовать функцию lamba для группировки по специальности, но я не могу понять, как добавить столбцы в качестве ключей / значений и создать список dict, а не просто гигантский dict.

d = (df2.groupby('specialty').apply(lambda x: dict(zip(x['code'], x['Rank']))).to_dict())

print(d)

{'Acute Care Hospital': {
    1562: 8.0, 
    1554: 11.0, 
    6095: 8.0, 
    119114: 1.0, 
    119117: 5.5, 
    284051: 4.0, 
    562577: 11.0, 
    582646: 8.0, 
    1631305: 2.0, 
    1641114: 5.5, 
    1751592: 3.0, 
    1873207: 11.0
}

Как мне сохранить столбцы в виде ключей, и это будет список по специальности:

[
    {'specialty': Acute Care Hospital', 
    [
        {'code': 1562, 'rank': 8.0, 
        'code': 1554, 'rank' :11.0, 
        'code': 6095, 'rank': 8.0, 
        'code': 119114, 'rank' 1.0, 
        'code': 119117, 'rank': 5.5, 
        'code': 284051, 'rank': 4.0, 
        'code': 562577, 'rank': 11.0, 
        'code': 582646, 'rank' 8.0, 
        'code': 1631305, 'rank': 2.0, 
        'code': 1641114, 'rank': 5.5, 
        'code': 1751592, 'rank': 3.0, 
        'code': 1873207, 'rank': 11.0}
    ]
    }
]

1 Ответ

0 голосов
/ 06 августа 2020

Опубликованный вами результат не будет работать, поскольку он содержит повторяющиеся ключи. Приведенные ниже решения могут быть тем, что вам нужно, поскольку он делает пары рангов кода вызываемыми из словаря.

Это создает еще один уровень словаря под специальностью основного уровня, где пары кода и ранга находятся в одном индексе в массивах:

df.groupby('specialty').apply(lambda x: {'code':x['code'].values,'Rank':x['Rank'].values}).to_dict()

Или следующий просто получает результат от groupby и помещает его под ключ code_rank_pair:

df.groupby('specialty').apply(lambda x: {'code_rank_pair':x.loc[:,['code','Rank']]}).to_dict()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...