Python 3.x 熊猫中数据帧的两行标题到一行标题

Python 3.x 熊猫中数据帧的两行标题到一行标题,python-3.x,pandas,header,multi-index,Python 3.x,Pandas,Header,Multi Index,我有一个多索引的数据集,二维标题。我希望通过将第一行中的空列名与同一行中的前一个非nan列名删除,将其合并到一个标题行中 下面显示了我拥有的数据帧的结构。 前两行是标题 id One Two response X1 Y1 Z1 X2 Y2 0 0 1.1 1.2 1.4 1.11 1.22 1 1 1.1 1.2 1.3 1.11 1.22 2 2

我有一个多索引的数据集,二维标题。我希望通过将第一行中的空列名与同一行中的前一个非nan列名删除,将其合并到一个标题行中

下面显示了我拥有的数据帧的结构。 前两行是标题

         id  One             Two      
  response   X1   Y1   Z1    X2    Y2
0        0  1.1  1.2  1.4  1.11  1.22
1        1  1.1  1.2  1.3  1.11  1.22
2        2  1.1  1.2  1.1  1.11  1.22

          
我想把上面的数据框改成下面的数据框

   id  One 1.X1  One 2.Y1  One 3.Z1  Two 1.X2  Two 2.Y2
0   0       1.1       1.2       1.4      1.11      1.22
1   1       1.1       1.2       1.3      1.11      1.22
2   2       1.1       1.2       1.1      1.11      1.22
实际数据帧有100多列

希望有人能帮我

比你好多了


Mary Abin.

如果您的列确实是一个多索引

i、 e

然后我们可以将它们传递到一个新的数据帧中,并在展平列之前在第一级使用累积计数

s = pd.DataFrame.from_records(df.columns)
s['col'] =  (s.groupby(0).cumcount()+1).astype(str) + '.'
#skip the first row and re-order columns to match your desired order.
df.columns = ['id'] + s.iloc[1:, [0,2,1]].astype(str).agg(' '.join,1).tolist()

df.columns=df.columns.droplevel0


检查此项

我尝试了此代码,但无法提供所需的结果。无论如何,感谢您的时间和努力。@JKdMwA输出有什么问题吗?这是Jupyter的截图。但它在终端上起作用了。当我在新的jupyter页面上尝试它时,它给出了预期的结果。这个也不起作用。代码只选择一行作为标题,而不合并标题行。谢谢你的回复。
s = pd.DataFrame.from_records(df.columns)
s['col'] =  (s.groupby(0).cumcount()+1).astype(str) + '.'
#skip the first row and re-order columns to match your desired order.
df.columns = ['id'] + s.iloc[1:, [0,2,1]].astype(str).agg(' '.join,1).tolist()
print(df)

   id  One 1. X1  One 2. Y1  One 3. Z1  Two 1. X2  Two 2. Y2
0   0        1.1        1.2        1.4       1.11       1.22
1   1        1.1        1.2        1.3       1.11       1.22
2   2        1.1        1.2        1.1       1.11       1.22


print(s)
    0         1 col
0   id  response  1.
1  One        X1  1.
2  One        Y1  2.
3  One        Z1  3.
4  Two        X2  1.
5  Two        Y2  2.