我有一个pandas表,其中只有行和列之间的某些交集,其中包含行和列以及数据。见下文:
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
谢谢您的任何建议。
答案 0 :(得分:2)
如果这些空单元格是Nan
,则可以在idxmax()
上使用notnull()
:
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