Dataframe groupby и список списков - PullRequest
0 голосов
/ 19 июня 2020

У меня следующий фрейм данных, и я пытаюсь создать список всех «значений» для данного «id»

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 2, 2],
                   'month': [2, 2, 4, 6],
                   'value': [4, 5, 4, 3],
                   })

print (df)
print ("\n")

print (df.apply(lambda x: list([x['id'], x['month']
                        x['value']]), axis=1),)

Ожидаемый результат:

1    [[2,4], [2, 5]]
2    [[4, 4], [6, 3]]

Как я могу это сделать?

1 Ответ

0 голосов
/ 21 июня 2020

Вы можете использовать groupby + apply, чтобы получить новый объект Series, например:

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 2, 2],
                   'month': [2, 2, 4, 6],
                   'value': [4, 5, 4, 3],
                   })

res = df.groupby('id').apply(
    lambda group: [[group.month[i], group.value[i]] for i in range(len(group))])

Вывод:

id
1    [[2, 4], [2, 5]]
2    [[4, 4], [6, 3]]
dtype: object

Или вы можете использовать тот же groupby + apply комбинация для получения подобного Dataframe, например:

import pandas as pd

df = pd.DataFrame({'id': [1, 1, 2, 2],
                   'month': [2, 2, 4, 6],
                   'value': [4, 5, 4, 3],
                   })

res = df.groupby('id').apply(
    lambda group: pd.DataFrame(
        {'result': [[[group.month[i], group.value[i]] for i in range(len(group))]]}))
res.index = res.index.droplevel(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...