Создать новые строки, если в транспонированном индексе есть повторяющиеся значения

У меня есть 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
Другие вопросы по тегам