我正在尝试旋转由 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/

10-12 23:46