Python,数据帧的元素排序

2024-04-29 07:02:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对数据帧元素的每一行进行排序

输入:

    A   B   C
0   10  5   6
1   3   6   5
2   1   2   3

输出:

    A   B   C
0   10  6   5
1   6   5   3
2   3   2   1

感觉这应该很容易,但我已经失败了一段时间。。。我是Python的初学者


Tags: 数据元素排序感觉初学者
1条回答
网友
1楼 · 发布于 2024-04-29 07:02:03

通过索引将^{}与交换顺序一起使用:

df1 = pd.DataFrame(np.sort(df.to_numpy(), axis=1)[:, ::-1], 
                   index=df.index, 
                   columns=df.columns)
print (df1)
    A  B  C
0  10  6  5
1   6  5  3
2   3  2  1

Pandas解决方案slowier是分别对每一行应用排序,转换为数组,然后转换为Series

f = lambda x: pd.Series(x.sort_values(ascending=False).to_numpy(), index=df.columns)
df1 = df.apply(f, axis=1)
print (df1)
    A  B  C
0  10  6  5
1   6  5  3
2   3  2  1

如果可能,我工作时缺少值:

print (df)
      A    B    C
0  10.0  6.0  5.0
1   5.0  3.0  NaN
2   2.0  1.0  NaN


df1 = pd.DataFrame(np.sort(df.to_numpy(), axis=1)[:, ::-1], 
                   index=df.index, 
                   columns=df.columns)
print (df1)
      A    B    C
0  10.0  6.0  5.0
1   NaN  5.0  3.0
2   NaN  2.0  1.0

在熊猫中,可以使用na_position参数指定熊猫的顺序:

f = lambda x: pd.Series(x.sort_values(ascending=False, na_position='first').to_numpy(), 
                        index=df.columns)
df1 = df.apply(f, axis=1)
print (df1)
      A    B    C
0  10.0  6.0  5.0
1   NaN  5.0  3.0
2   NaN  2.0  1.0

f = lambda x: pd.Series(x.sort_values(ascending=False, na_position='last').to_numpy(), 
                        index=df.columns)
df1 = df.apply(f, axis=1)
print (df1)
      A    B    C
0  10.0  6.0  5.0
1   5.0  3.0  NaN
2   2.0  1.0  NaN

相关问题 更多 >