有没有办法通过与行的交集对 pandas 列进行排序?

Is there a way to sort pandas columns by intersections with rows?

我有一个 pandas table,其中包含行和列,并且数据仅位于行和列之间的某些交叉点。见下文:

     col1  col2  col3  col4  col5
row1  1
row2               1    1
row3  1     
row4                    1     1
row5        1                

我想对列进行排序,以便与第 1 行相交的列排在第一位,与第 2 行相交的列排在第二位,依此类推。如下图:

     col1  col3  col4  col5  col2
row1  1
row2        1      1    
row3  1     
row4               1     1
row5                          1

感谢您的任何建议。

如果这些空单元格是 Nan,您可以在 notnull() 上使用 idxmax():

orders = df.notnull().agg(['any', 'idxmax']).T
col_orders = orders.sort_values(['any', 'idxmax'],
                                ascending=[False, True]).index


df[col_orders]

输出:

      col1  col3  col4  col5  col2
row1   1.0   NaN   NaN   NaN   NaN
row2   NaN   1.0   1.0   NaN   NaN
row3   1.0   NaN   NaN   NaN   NaN
row4   NaN   NaN   1.0   1.0   NaN
row5   NaN   NaN   NaN   NaN   1.0