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 № 1Vamos 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