Создать новые строки, если в транспонированном индексе есть повторяющиеся значения
У меня есть 2 столбца:
Col1 Col2
------------
Date1 A
Date1 B
Date2 C
Date3 A
вывод должен быть:
Колонны: A,B,C
A B C
------------------------
Date1 Date1 Date2
Date3 NaN Nan
А также мой список столбцов A,B,C,D,E,F
если в моих окончательных результатах нет других столбцов, таких как D,E,F . Мне нужно создать пропущенные значения для этих столбцов
Окончательный вывод:
A B C D E F
----------------------------------------------
Date1 Date1 Date2 NaN NaN NaN
Date3 NaN NaN NaN NaN Nan
Я пробовал транспонировать
df.set_index("Col2").T
но он дает A B C A как имена столбцов, и в этом случае мне нужно добавить значение столбца второго A к первому столбцу A
2 ответа
pivot
+ reindex
Вы можете использовать вспомогательную серию для создания индекса, а затем столбцы Pivot и Reindex:
res = df.assign(index=df.groupby('Col2').cumcount())\
.pivot(index='index', columns='Col2')\
.xs('Col1', axis=1).reindex(columns=tuple('ABCDEF'))
print(res)
Col2 A B C D E F
index
0 Date1 Date1 Date2 NaN NaN NaN
1 Date3 NaN NaN NaN NaN NaN
Ты можешь использовать crosstab
а также reindex
:
categories = ['A','B','C','D','E','F']
c = df.groupby('Col2').cumcount()
pd.crosstab(c, df.Col2, df.Col1, aggfunc='first').reindex(categories, axis=1)
Col2 A B C D E F
row_0
0 Date1 Date1 Date2 NaN NaN NaN
1 Date3 NaN NaN NaN NaN NaN