Pandas:按第二个数据帧排序索引对数据帧列进行排序

时间:2017-07-20 20:25:10

标签: pandas sorting dataframe indexing

假设我有两个数据帧(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')

1 个答案:

答案 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