我有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列
答案 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)
您可以使用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