Pandas df 根据整数索引列表对行和列重新排序

Liz*_*ice 4 python dataframe pandas

我的数据框具有以下结构:

          col1    col2   col3
 myindex
 apple    A       B      C
 pear     Ab      Bb     Cb
 turtle   A1      B1     C1
Run Code Online (Sandbox Code Playgroud)

现在我得到两个列表,一个具有重新排序的列索引,一个具有重新排序的行索引,但作为整数,例如rowindices = [3,1,2]和colindices = [1,3,2]。数据框现在应该根据这些索引重新排序,然后看起来像这样:

          col1   col3   col2
 myindex
 turtle   A1     C1     B1
 apple    A      C      B
 pear     Ab     Cb     Bb
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

jez*_*ael 5

使用DataFrame.ilocand 因为 python 计数从0转换列表到数组并减去1:

rowindices = [3,1,2]
colindices = [1,3,2]

df = df.iloc[np.array(rowindices)-1, np.array(colindices)-1]
print (df)
        col1 col3 col2
myindex               
turtle    A1   C1   B1
apple      A    C    B
pear      Ab   Cb   Bb
Run Code Online (Sandbox Code Playgroud)

如果可能,列表解决方案中的更改值更简单:

rowindices1 = [2,0,1]
colindices1 = [0,2,1]

df = df.iloc[rowindices1, colindices1]
print (df)
        col1 col3 col2
myindex               
turtle    A1   C1   B1
apple      A    C    B
pear      Ab   Cb   Bb
Run Code Online (Sandbox Code Playgroud)