根据 Pandas 中组的第一个值旋转 table

Pivot table based on the first value of the group in Pandas

有以下DataFrame:

我试图在 pandas 中旋转它并实现以下格式:

实际上我尝试了 pd.pivot_table() 的经典方法,但没有成功:

pd.pivot_table(df,values='col2', index=[df.index], columns = 'col1')

如有建议将不胜感激:)谢谢!

您可以对每一列使用 pivot 然后 dropna

>>> df.pivot(columns='col1', values='col2').apply(lambda x: x.dropna().tolist()).astype(int)
col1  a  b  c
0     1  2  9
1     4  5  0
2     6  8  7

另一种选择是使用 groupby.agg 创建一系列列表;然后构造一个DataFrame:

out = df.groupby('col1')['col2'].agg(list).pipe(lambda x: pd.DataFrame(zip(*x), columns=x.index.tolist()))

输出:

   A  B  C
0  1  2  9
1  4  5  0
2  6  8  7