Создать словарное поле из двух Pandas полей - PullRequest
3 голосов
/ 04 мая 2020

Допустим, у меня есть фрейм данных:

time    action    player    ...[other fields]
----------------------------------------------
10:00   Buy       A
10:00   Hold      B
09:45   Sell      A
09:45   Buy       B
09:45   Hold      A
09:30   Hold      A

Я могу создать список действий с помощью df.groupby('time)['action'].apply(list)

Я хочу создать поле, которое агрегируется на time и создает словарь из action / player.

Итак, ожидаемый результат:

 time    action    ...[other fields]
----------------------------------------------
10:00   {A:Buy,B:Hold}
09:45   {A:[Sell,Hold],B:Buy}
09:30   {A:Hold}

Может быть что-то вроде df.groupby('time)['action'].apply(dict,player=action)?

1 Ответ

7 голосов
/ 04 мая 2020

Вы близки ... просто set_index к игроку таким образом, когда вы groupby, и agg(dict) у вас есть соответствующие ключи для вашего диктанта.

df.set_index('player').groupby('time')['action'].agg(dict)

time
09:30                          {'A': 'Hold'}
09:45    {'A': ['Sell', 'Hold'], 'B': 'Buy'}
10:00              {'A': 'Buy', 'B': 'Hold'}
...