如果转置索引具有重复值,则创建新行

时间:2018-12-19 17:42:53

标签: python pandas transpose

我有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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用crosstabreindex

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