我有一个关于综合分数和两者之间的差别的小数据:
score_1 score_2 diff
10 15 5
7 9 2
13 23 10
12 4 -8
...有相当多的行,所以我希望根据score_1和score_2之间最大的差异来排序数据。
df.sort_values(by=['diff'], ascending=False)但这一结果是:
score_1 score_2 diff
13 23 10
10 15 5
7 9 2
12 4 -8而我要找的是:
score_1 score_2 diff
13 23 10
12 4 -8
10 15 5
7 9 2返回最大的降序差异,而不管是负差还是正差。
发布于 2022-03-31 12:31:59
使用:
df2 = df.sort_values(by='diff', ascending=False, key=abs)或者,另一种选择是:
df2 = df.loc[df['diff'].abs().sort_values(ascending=False).index]产出:
score_1 score_2 diff
2 13 23 10
3 12 4 -8
0 10 15 5
1 7 9 2发布于 2022-03-31 12:30:52
将参数key用于DataFrame.sort_values中的绝对值:
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和降序的替代解决方案使用否定位置:
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发布于 2022-03-31 12:48:01
如果您不想使用lambda函数,所以您可以在一个可以被腌制的转换器中使用它,那么您可以使用pandas.reindex()函数。
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 2https://stackoverflow.com/questions/71692512
复制相似问题