将具有元组的数据帧转换为具有多索引的数据帧



我想将单元格中有元组的数据帧转换为具有MultiIndex的数据帧。以下是表格代码的示例:

d = {2:[(0,2),(0,4)], 3:[(826.0, 826.0),(4132.0, 4132.0)], 4:[(6019.0, 6019.0),(12037.0, 12037.0)], 6:[(18337.0, 18605.0),(36674.0, 37209.0)]}
test = pd.DataFrame(d)

这就是数据帧的样子:

2                 3                   4                   6
0  (0, 2)    (826.0, 826.0)    (6019.0, 6019.0)  (18337.0, 18605.0)
1  (0, 4)  (4132.0, 4132.0)  (12037.0, 12037.0)  (36674.0, 37209.0)

这就是我想要的

2       3        4        6
0 A  0   826.0   6019.0  18337.0
B  2   826.0   6019.0  18605.0
1 A  0  4132.0  12037.0  36674.0
B  4  4132.0  12037.0  37209.0

谢谢你的帮助!

效率不确定,因为这将依赖于apply方法,但您可以将数据帧本身连接起来,在第一个列中添加'A'列,在第二个列中增加'B'列。然后,根据索引对结果数据帧进行排序,并使用apply将偶数行更改为元组的第一个值,将奇数行更改为第二个值:

df = pd.concat([test.assign(X='A'), test.assign(X='B')]).set_index(
'X', append=True).sort_index().rename_axis(index=(None, None))
df.iloc[0:len(df):2] = df.iloc[0:len(df):2].apply(lambda x: x.apply(lambda y: y[0]))
df.iloc[1:len(df):2] = df.iloc[1:len(df):2].apply(lambda x: x.apply(lambda y: y[1]))

如预期:

2     3      4      6
0 A  0   826   6019  18337
B  2   826   6019  18605
1 A  0  4132  12037  36674
B  4  4132  12037  37209

最新更新