You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用numpy.argsort结果对Pandas DataFrame行排序?

解决用numpy.argsort索引对DataFrame每行排序的问题

直接用df[idx]行不通,是因为Pandas的方括号索引是按列标签匹配的,不是按行内位置索引重新排列每行元素。下面给你两种可行的解决方法:

方法1:用numpy的take_along_axis(效率优先,推荐)

np.take_along_axis可以直接对numpy数组按指定的逐行索引进行排序,处理后再转回DataFrame,还能保留原有的索引和列名:

import numpy as np
import pandas as pd

# 假设已经有df、df2,以及通过idx = np.argsort(df, axis=1)得到的索引
# 对df排序
df_sorted = pd.DataFrame(
    np.take_along_axis(df.to_numpy(), idx, axis=1),
    index=df.index,
    columns=df.columns
)

# 对同形状的df2做同样排序
df2_sorted = pd.DataFrame(
    np.take_along_axis(df2.to_numpy(), idx, axis=1),
    index=df2.index,
    columns=df2.columns
)

方法2:用Pandas的apply+iloc(适合小数据集)

逐行调用iloc,按位置索引重新排列每行元素:

# 对df排序
df_sorted = df.apply(lambda row: row.iloc[idx[row.name]], axis=1)

# 对df2排序
df2_sorted = df2.apply(lambda row: row.iloc[idx[row.name]], axis=1)

注意:这种方法是逐行循环处理,数据集较大时,效率会比numpy方法低不少。

内容的提问来源于stack exchange,提问作者user3252986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:50:41