Pandas 熊猫:将行转换为列,并将所有其他条目设为第二列
我有这样一个熊猫数据框:Pandas 熊猫:将行转换为列,并将所有其他条目设为第二列,pandas,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 我想按如下方式对其进行重塑(不需要列标题): 我该怎么做呢?我想我有一个粗略的解决方案,但它并不优雅。假
Col1 Col2 Col3 Col4
control x1 x2 x3 x4
obs1 o11 o12 o13 o14
obs2 o21 o22 o23 o24
...
obsn on1 on2 on3 on4
我想按如下方式对其进行重塑(不需要列标题):
我该怎么做呢?我想我有一个粗略的解决方案,但它并不优雅。假设
df
是我的数据帧
mdf = df.melt()
for col in df.columns:
mdf.loc[mdf['variable'] == col, 'variable'] = df.loc['control', col]
mdf.drop(mdf[mdf['variable'] == mdf['value']].index, inplace=True)
您可以选择您的“控制”行,并使用该行通过set\u axis
设置列,从那里可以进行简单的melt
sort_值
和reset_索引
在功能上是不必要的,但它们将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
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