我正在尝试旋转由 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
关于Python/Pandas :How does one pivot a table whereby the unique values in a specified multi -index or column form part of the resultant column name?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59397318/