首页 > 解决方案 > Pandas:将一行转换为一列,并将所有其他条目作为第二列

问题描述

我有一个像这样的熊猫数据框:

            Col1  Col2  Col3  Col4
control      x1    x2    x3    x4
obs1         o11   o12   o13   o14
obs2         o21   o22   o23   o24
...
obsn         on1   on2   on3   on4      

我想将其重塑如下(不需要列标题):

     control Observation
1      x1        o11
2      x1        o12
3      x1        o13
...
m      xk        ok1
m+1    xk        ok2
...

我该怎么做?

标签: pandas

解决方案


您可以选择您的“控制”行并使用它来设置您的列,set_axis从那里它是一个简单的melt.

sort_values和在reset_index功能上不是必需的,但它们dataframe与您的预期输出一致,因此我将它们包括在此处:

control = df.loc["control", :]
observations = df.drop("control")

out = (observations.set_axis(control, axis=1)
       .melt(value_name="observation")
       .sort_values("observation")
       .reset_index(drop=True))

print(out)
  control observation
0      x1         o11
1      x2         o12
2      x3         o13
3      x4         o14
4      x1         o21
5      x2         o22
6      x3         o23
7      x4         o24

推荐阅读