Groupby, транспонировать и добавлять в панд?

у меня есть фрейм данных, который выглядит так:

enter image description here

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

userid  name1  name2  ... name10

что означает, что мне нужно инвертировать каждые 10 записей столбца name и добавить в новую таблицу данных.

Итак, как это сделать? Есть ли способ сделать это в панд?

1 ответов


groupby('userid') затем reset_index внутри каждой группы для последовательного перечисления между группами. Тогда unstack чтобы получить столбцы.

df.groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()

демонстрация

df = pd.DataFrame([
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [456, 'def'],
        [456, 'def'],
    ], columns=['userid', 'name'])

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()

enter image description here

если вы не хотите, чтобы userid в качестве индекса, добавить reset_index до конца.

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()

enter image description here