如何基于DataFrame行内降序值动态重排Pandas列?
Pandas实现按行内数值降序重排列动态列
问题描述
需要对Pandas DataFrame的列按每行内数值降序重新排列,列由API动态生成,无法通过指定固定列名的df.sort_values(by='column_name')方法实现。
原DataFrame:
JSWINFRA GUFICBIO HARIOMPIPE 3 4 4 1 3 3 0 0 1 4 1 0
期望重排结果:
HARIOMPIPE GUFICBIO JSWINFRA 4 4 3 3 3 1 1 0 0 0 1 4
实现方法
可以利用apply方法逐行处理,结合argsort获取每行数值降序对应的列索引,再按该索引重新排列列:
import pandas as pd # 构造示例DataFrame(实际场景可直接使用API返回的DataFrame) df = pd.DataFrame({ 'JSWINFRA': [3, 1, 0, 4], 'GUFICBIO': [4, 3, 0, 1], 'HARIOMPIPE': [4, 3, 1, 0] }) # 按行内数值降序重排列列 df_sorted = df.apply(lambda row: row.iloc[row.argsort()[::-1]], axis=1) print(df_sorted)
代码说明
row.argsort():返回每行数值升序排列的索引位置,[::-1]反转后得到降序索引。row.iloc[row.argsort()[::-1]]:根据降序索引重新排列该行的元素顺序。axis=1:指定apply按行维度执行处理,完全适配动态生成的列,无需指定固定列名。
内容的提问来源于stack exchange,提问作者Amal Raj
相关产品推荐
相关产品推荐

