#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