pd.concat 使用多索引
pd.concat with multiindex
我有一个多索引 df,我想对其执行一个元素级操作,该操作因级别 1 列中的字符串而异,然后使用相同的 index/column 结构组合它们。
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
添加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
我有一个多索引 df,我想对其执行一个元素级操作,该操作因级别 1 列中的字符串而异,然后使用相同的 index/column 结构组合它们。
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
添加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