/ / Pandas: classificação de colunas de dataframe pelo segundo índice classificado de dataframe - pandas, classificação, dataframe, indexação

Pandas: classificação de colunas do dataframe pelo segundo índice classificado pelo dataframe - pandas, classificação, dataframe, indexação

Suponha que eu tenha dois dataframes (df1 e 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

Eu gostaria de classificar as colunas do df1 pelos campos do df2. Eu esperaria que a saída fosse esta:

    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

Em outras palavras, como posso classificar as colunas de df1 desta forma:

df2.sort(columns=["Number","Letter"]).index

Out[3]: Index(["A1", "C1", "A2", "B2", "C2"], dtype="object")

Respostas:

0 para resposta № 1

Vamos usar reindex_axis:

df1.reindex_axis(df2.sort_values(by=["Number","Letter"]).index,axis=1)

Saída:

    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