Как я могу повернуть один столбец уникальных идентификаторов, чтобы отобразить все соответствующие вторичные идентификаторы в соседних столбцах?

#python #python-3.x #pandas #dataframe

Вопрос:

У меня есть один столбец с первичными идентификационными номерами, и с каждым из этих первичных идентификационных номеров может быть связано до 3 вторичных идентификационных номеров. Я хочу повернуть вторичные идентификаторы так, чтобы все они отображались в 3 столбцах справа только от одного экземпляра каждого первичного идентификатора.

В настоящее время это выглядит так:

Основной идентификатор Дополнительный идентификатор
1 234234
1 435234
1 22233
2 334342
2 543236
2 134623
3 8475623
3 3928484
4 3723429
5 3945857
5 11112233
5 9878976

Я хочу, чтобы это выглядело так:

Основной идентификатор Вторичное 1 Вторичное 2 Среднее 3
1 234234 435234 22233
2 334342 543236 134623
3 8475623 3928484
4 3723429
5 3945857 11112233 9878976

Не уверен, как получить заголовки столбцов там и, вероятно, откуда возникают мои проблемы, когда я пытаюсь использовать сводную таблицу или сводную таблицу с пандами.

Ответ №1:

Вот один из способов:

 df = (
    df.pivot_table(
        index='Primary ID',
        columns=df.groupby('Primary ID').cumcount().add(1),
        values='Secondary ID'
    ).add_prefix('Secondary').reset_index()
)
 

Альтернатива:

 df = df.assign(t=df.groupby('Primary ID').cumcount().add(
    1)).set_index(['Primary ID',  't']).unstack(-1)
 

выход:

    Primary ID  Secondary1  Secondary2  Secondary3
0           1    234234.0    435234.0     22233.0
1           2    334342.0    543236.0    134623.0
2           3   8475623.0   3928484.0         NaN
3           4   3723429.0         NaN         NaN
4           5   3945857.0  11112233.0   9878976.0