假设我有两个数据帧(df1和df2):
A1 = pd.Series(np.ones(5))
C1 = pd.Series(np.ones(5))*2
A2 = pd.Series(np.ones(5))*3
B2 = pd.Series(np.ones(5))*4
C2 = pd.Series(np.ones(5))*5
df1 = pd.concat([A1,A2,B2,C1,C2],keys = ['A1','A2','B2','C1','C2'],axis=1)
d = {'Letter' : ['A','B','C','A','B'],'Number' : [1,1,1,2,2]}
df2 = pd.DataFrame(d, columns = ['Letter','Number'],index = ['A1','C1','A2','B2','C2'])
df1
Out[1]:
A1 A2 B2 C1 C2
0 1.0 3.0 4.0 2.0 5.0
1 1.0 3.0 4.0 2.0 5.0
2 1.0 3.0 4.0 2.0 5.0
3 1.0 3.0 4.0 2.0 5.0
4 1.0 3.0 4.0 2.0 5.0
df2
Out[2]:
Letter Number
A1 A 1
C1 B 1
A2 C 1
B2 A 2
C2 B 2
我想按df2的字段对df1的列进行排序。我希望输出是这样的:
A1 C1 A2 B2 C2
0 1.0 2.0 3.0 4.0 5.0
1 1.0 2.0 3.0 4.0 5.0
2 1.0 2.0 3.0 4.0 5.0
3 1.0 2.0 3.0 4.0 5.0
4 1.0 2.0 3.0 4.0 5.0
换句话说,我怎样才能对df1的列进行排序:
df2.sort(columns=['Number','Letter']).index
Out[3]: Index(['A1', 'C1', 'A2', 'B2', 'C2'], dtype='object')
答案 0 :(得分:0)
让我们使用reindex_axis
:
df1.reindex_axis(df2.sort_values(by=['Number','Letter']).index,axis=1)
输出:
A1 C1 A2 B2 C2
0 1.0 2.0 3.0 4.0 5.0
1 1.0 2.0 3.0 4.0 5.0
2 1.0 2.0 3.0 4.0 5.0
3 1.0 2.0 3.0 4.0 5.0
4 1.0 2.0 3.0 4.0 5.0