Python 3.x 熊猫中数据帧的两行标题到一行标题
我有一个多索引的数据集,二维标题。我希望通过将第一行中的空列名与同一行中的前一个非nan列名删除,将其合并到一个标题行中 下面显示了我拥有的数据帧的结构。 前两行是标题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
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.