我正在尝试透视一个由 3 列组成的 pandas 表,其中进程 id 标识生成一系列标量值的进程,构成结果数据帧列(每个进程(的一部分,如下所述:
输入
time scalar process_id
1 0.5 A
1 0.6 B
2 0.7 A
2 1.5 B
3 1.6 A
3 1.9 B
合成的:
time scalar_A scalar_B
1 0.5 0.6
2 0.7 1.5
3 1.6 1.9
我尝试使用unstack(在多索引中设置进程ID之后(,但是这会导致生成它们的列和进程ID嵌套:
bicir.set_index(['time', 'process_id'], inplace=True)
df.unstack(level=-1)
如何最有效/有效地实现这一目标? 谢谢
它实际上已经被 pd 覆盖了。DataFrame.pivot 方法:
new_df = df.pivot(index='time', columns='process_id', values='scalar').reset_index()
输出:
process_id time A B
0 1 0.5 0.6
1 2 0.7 1.5
2 3 1.6 1.9
如果要重命名列:
new_df = df.pivot(index='time', columns='process_id', values='scalar')
new_df.columns = [f'scalar_{i}' for i in new_df.columns]
new_df = new_df.reset_index()
输出:
time scalar_A scalar_B
0 1 0.5 0.6
1 2 0.7 1.5
2 3 1.6 1.9