Как использовать Multiindex для объединения в список в пандах? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть такой фрейм данных:

    class1  class2  values  values2
0        1       0       1        5
1        1       1       2        8
2        1       0       3        3
3        2       0       5        6
4        2       0       2        5
5        2       1       4        2
6        2       1       2        3
7        2       1       3        1
8        3       0       1        3
9        3       0       3        3
10       3       1       4        2
11       3       1       2        4

Я надеюсь установить Multiindex на основе class1 и class2, а затем объединить value и value2 в список.Поэтому я хочу получить результат , который должен выглядеть следующим образом:

   class1  class2     values    values2
0       1       0     [1, 3]     [5, 3]
1       1       1        [2]        [8]
2       2       0     [5, 2]     [6, 5]
3       2       1  [4, 2, 3]  [2, 3, 1]
4       3       0     [1, 3]     [3, 3]
5       3       1     [4, 2]     [2, 4]

Я попытался сделать это:

df.groupby(['class1']).agg(lambda x: x.tolist()).reset_index()

Это не проблема.Но я попробовал Multiindex:

df.groupby(['class1','class2']).agg(lambda x: x.tolist()).reset_index()

Показать ошибку:

ValueError: Функция не уменьшает

Я также попробовал это сделать:

df.groupby(['class1', 'class2'])['values'].apply(lambda x: x.tolist()).reset_index()

Этот метод может обрабатываться отдельно только для value или Value2.

Может кто-нибудь помочь мне с лучшим способом?Заранее спасибо

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете агрегировать с tuple, а затем конвертировать в list с applymap

df.groupby(['class1', 'class2']).agg(tuple).applymap(list).reset_index()

   class1  class2     values    values2
0       1       0     [1, 3]     [5, 3]
1       1       1        [2]        [8]
2       2       0     [5, 2]     [6, 5]
3       2       1  [4, 2, 3]  [2, 3, 1]
4       3       0     [1, 3]     [3, 3]
5       3       1     [4, 2]     [2, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...