Панды, группировать и объединять несколько значений столбцов в DICT - PullRequest
0 голосов
/ 08 февраля 2019

Итак, у меня есть фрейм данных, в котором я хочу объединить несколько строк с помощью группы.

Пример DF,

   col_a  col_b  col_c  col_e  col_f
0      1      0      1   -1.0      2
1      1      1      3    0.0      3
2      1      2      4    NaN      3
3      2      0      3    4.0      6
4      3      0      3    4.0      2

И я хочу, чтобы вывод выглядел следующим образом...

df.groupby('col_a')

col_a, col_c               ...col_f
1       {0: 1, 1: 3, 2:4}     {0:2,1:3,2:3}
2       ....                 ....
3        ....               ....

По сути, группируем по col_a, затем агрегируем все значения, которые мы получили для col_c через col_f, устанавливаем значения в словарь, где col_b - ключ словаря.

Не уверенесли есть способ использовать groupby и, возможно, какую-то функцию agg, или если я просто смирился с написанием функции python, которая берет фрейм данных и просто перебирает каждую строку и использует .apply.Идеи?

Редактировать:

Original:
       col_a  col_b  col_c  col_e  col_f
    0      1      A     1   -1.0      2
    1      1      B      3    0.0      3
    2      1      C      4    NaN      3
    3      2      A      3    4.0      6
    4      3      A      3    4.0      2

Desired:
    col_a, col_c               ...col_f
    1       {A: 1, B: 3, C:4}     {A:2,B:3,C:3}
    2       ....                 ....
    3        {A:3}               {A:2}

1 Ответ

0 голосов
/ 08 февраля 2019

Я не думаю, что вы хотите сделать это, редко возникает необходимость в DataFrame of dicts.Вы можете делать все те же операции (и более), используя DataFrame с этими индексами / столбцами в MultiIndex:

In [11]: res = df.set_index(["col_a", "col_b"])

In [12]: res
Out[11]:
             col_c  col_e  col_f
col_a col_b
1     0          1   -1.0      2
      1          3    0.0      3
      2          4    NaN      3
2     0          3    4.0      6
3     0          3    4.0      2

Теперь вы можете получить доступ к DataFrame с помощью col_a, col_b и любого другого столбца (какесли бы это был диктат).

In [13]: res.loc[(1, 2), "col_c"]
Out[13]: 4.0

In [14]: res.loc[1, "col_c"]
Out[14]:
col_b
0    1
1    3
2    4
Name: col_c, dtype: int64

и т. д.Это будет более эффективно, чем использование dict внутри DataFrame ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...