熊猫:在数据帧中从长格式到宽格式

时间:2021-02-08 16:07:43

标签: python pandas dataframe pivot

在 Pandas 中,我无法从长格式转换为宽格式。从宽到长的例子很多,但我没有找到从长到宽的例子。 我正在尝试重新格式化我的数据框和数据透视、groupby、unstack 对我的用例来说有点混乱。

这就是我想要的。这些数字实际上是第二张图像中的强度列。 enter image description here

现在是这样

enter image description here

我试图建立一个基于肽、电荷和蛋白质的 MultiIndex。然后我尝试根据该多索引进行透视,并将所有样本及其强度保留为值:

df.set_index(['Peptide', 'Charge', 'Protein'], append=False)
df.pivot(index=df.index, columns='Sample', values='Intensity')

当然,这不起作用,因为我的索引现在是 3 的组合,而不是数据框中的实际列。

它告诉我

KeyError: None of [RangeIndex(start=0, stop=3397898, step=1)] are in the [columns]

我也尝试分组,但我不确定如何从长格式移回宽格式。我对数据框的思维方式很陌生,我想学习如何正确地做到这一点。 对我来说,用 4 个 for 循环做一个老式的“java”式方法并将其构建为矩阵是非常诱人的。提前谢谢你!

1 个答案:

答案 0 :(得分:0)

根据您的尝试,我认为这可能会奏效:

df2 = df.pivot(['Peptide', 'Charge', 'Protein'], columns='Sample', values='Intensity').reset_index()

之后,如果要从列轴上删除名称:

df2 = df2.rename_axis(None, axis=1)