首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >序号列按最高数字排列,而不论正或负。

序号列按最高数字排列,而不论正或负。
EN

Stack Overflow用户
提问于 2022-03-31 12:29:17
回答 4查看 124关注 0票数 0

我有一个关于综合分数和两者之间的差别的小数据:

代码语言:javascript
运行
复制
score_1    score_2    diff
10         15         5
7          9          2
13         23         10
12         4          -8
...

有相当多的行,所以我希望根据score_1和score_2之间最大的差异来排序数据。

代码语言:javascript
运行
复制
df.sort_values(by=['diff'], ascending=False)

但这一结果是:

代码语言:javascript
运行
复制
score_1    score_2    diff
13         23         10
10         15         5
7          9          2
12         4          -8

而我要找的是:

代码语言:javascript
运行
复制
score_1    score_2    diff
13         23         10
12         4          -8
10         15         5
7          9          2

返回最大的降序差异,而不管是负差还是正差。

EN

回答 4

Stack Overflow用户

发布于 2022-03-31 12:31:59

使用:

代码语言:javascript
运行
复制
df2 = df.sort_values(by='diff', ascending=False, key=abs)

或者,另一种选择是:

代码语言:javascript
运行
复制
df2 = df.loc[df['diff'].abs().sort_values(ascending=False).index]

产出:

代码语言:javascript
运行
复制
   score_1  score_2  diff
2       13       23    10
3       12        4    -8
0       10       15     5
1        7        9     2
票数 2
EN

Stack Overflow用户

发布于 2022-03-31 12:30:52

将参数key用于DataFrame.sort_values中的绝对值:

代码语言:javascript
运行
复制
df = df.sort_values(by=['diff'], ascending=False, key=lambda x: x.abs())
print (df)
   score_1  score_2  diff
2       13       23    10
3       12        4    -8
0       10       15     5
1        7        9     2

使用Series.argsort和降序的替代解决方案使用否定位置:

代码语言:javascript
运行
复制
df = df.iloc[(-df['diff'].abs()).argsort()]
print (df)
   score_1  score_2  diff
2       13       23    10
3       12        4    -8
0       10       15     5
1        7        9     2
票数 1
EN

Stack Overflow用户

发布于 2022-03-31 12:48:01

如果您不想使用lambda函数,所以您可以在一个可以被腌制的转换器中使用它,那么您可以使用pandas.reindex()函数。

代码语言:javascript
运行
复制
new_index = df['diff'].abs().sort_values(ascending=False).index
df.reindex(new_index)

   score_1  score_2  diff
2       13       23    10
3       12        4    -8
0       10       15     5
1        7        9     2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71692512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档