根据 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
有以下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