индексирование объекта groupby с несколькими ключами в pandas - PullRequest
1 голос
/ 03 августа 2020

У меня есть pd.DataFrame, который я хочу преобразовать в словарь. Ключи словаря - это значения первого столбца, а значения словаря - это значения из второго и третьего столбца, помещенные в кортеж или список. Я пытался добиться этого так:

    df 
    form  name  state
    CCH   bla1  act
    BGH   bla2  act
    BGH   bla3  nad
    KMJ   bla4  nad
    FRT   bla5  nad 
    
    

Я хочу, чтобы dict выглядел так:

    {CCH:[(bla1, act)], BGH:[(bla2,act),(bla3,nad)],KMJ:[(bla4,nad)],FRT:[(bla5,nad)]}

Мой текущий код для достижения этого:

    df.groupby('form')[['name','state']].apply(tuple).to_dict()

Но я получаю такой вывод:

    {CCH:('name','state'),BGH:('name','state'),KMJ:('name','state'),FRT:('name','state')}

Пожалуйста, дайте мне знать, где я ошибаюсь? Заранее спасибо!

1 Ответ

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

Вы действительно близки, попробуйте apply кортеж вдоль оси 1. Вот одно решение, использующее понимание dict:

d = {k: v[['name', 'state']].apply(tuple, axis=1).tolist()
     for k, v in df.groupby('form')}

[out]

{'BGH': [('bla2', 'act'), ('bla3', 'nad')],
 'CCH': [('bla1', 'act')],
 'FRT': [('bla5', 'nad')],
 'KMJ': [('bla4', 'nad')]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...