有没有办法通过与行的交集对 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
我有一个 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