我有一个多索引的df,我想对它执行元素操作,这取决于1级列中的字符串,然后使用相同的索引/列结构组合它们。
dic = {'X':pd.DataFrame(np.random.randn(10, 2), columns = ['A','B']),
'Y':pd.DataFrame(np.random.randn(10, 2), columns = ['A','B']),
'Z':pd.DataFrame(np.random.randn(10, 2), columns = ['A','B'])}
multi = pd.concat(dic.values(),axis=1,keys=dic.keys())
a = multi[multi.filter(like='A').columns].applymap(lambda x: x>=1 and x <= 2)
b = multi[multi.filter(like='B').columns].applymap(lambda x: x>=-1 and x <= 1)
pd.concat([a,b], axis = 1)
为我提供了正确的数据
Out[164]:
X Y Z X Y Z
A A A B B B
0 False False False True False True
1 True True False True True False
2 False False False True False True
3 False False False False True True
4 False False False True True True
5 False False True False True True
6 False False False False True True
7 False False False True True True
8 False True False True False True
9 False False False True False False
但我希望它显示
Out[168]:
X Y Z
A B A B A B
0 False True False False False True
1 True True True True False False
2 False True False False False True
3 False False False True False True
4 False True False True False True
5 False False False True True True
6 False False False True False True
7 False True False True False True
8 False True True False False True
9 False True False False False False
答案 0 :(得分:2)
添加sort_index
pd.concat([a,b], axis = 1).sort_index(axis=1)
Out[162]:
X Y Z
A B A B A B
0 False True False True False False
1 False True False True False True
2 False True False True False False
3 False True False True False True
4 False False False True False True
5 False True False False False True
6 False True False True False False
7 False True False True False True
8 False True True True False True
9 False False False True False False