我有一个这样的数据框:
c234 0.4255 0.2348 0.4255
c234 0.876 0.456 0.876
c561 0.9527 0.263 0.9527
c561 0.4111 0.1543 0.4111
c561 0.8231 0.975 0.975
我想在每个4th column
中对1st column
进行排序,输出将如下所示:
c234 0.876 0.456 0.876
c234 0.4255 0.2348 0.4255
c561 0.8231 0.975 0.975
c561 0.9527 0.263 0.9527
c561 0.4111 0.1543 0.4111
请帮忙吗?
答案 0 :(得分:3)
使用sort_values
和ascending
作为布尔值列表来确定方向:
df.sort_values([0,3], ascending=[True, False])
输出:
0 1 2 3
1 c234 0.8760 0.4560 0.8760
0 c234 0.4255 0.2348 0.4255
4 c561 0.8231 0.9750 0.9750
2 c561 0.9527 0.2630 0.9527
3 c561 0.4111 0.1543 0.4111
答案 1 :(得分:2)
sort_values
获取列列表假设您的列名是[0, 1, 2, 3]
df.sort_values([0, 3], ascending=[True, False])
0 1 2 3
1 c234 0.8760 0.4560 0.8760
0 c234 0.4255 0.2348 0.4255
4 c561 0.8231 0.9750 0.9750
2 c561 0.9527 0.2630 0.9527
3 c561 0.4111 0.1543 0.4111
假设第一列未排序,并且您不希望对其进行排序。您只希望对每个组中的行进行排序。
df.loc[
df.groupby(0)[3].transform(
lambda x: x.sort_values(ascending=False).index
).astype(df.index.dtype)
]
0 1 2 3
1 c234 0.8760 0.4560 0.8760
0 c234 0.4255 0.2348 0.4255
4 c561 0.8231 0.9750 0.9750
2 c561 0.9527 0.2630 0.9527
3 c561 0.4111 0.1543 0.4111
但这并不有趣。假设数据框是这个
0 1 2 3
0 c561 0.9527 0.2630 0.9527
1 c234 0.4255 0.2348 0.4255
2 c234 0.8760 0.4560 0.8760
3 c561 0.4111 0.1543 0.4111
4 c561 0.8231 0.9750 0.9750
请注意,'c561'
位于顶部,底部位于更多位置。我们可以对其进行排序,并保持相同的行位置。让我们再次运行最后一个解决方案。
0 1 2 3
4 c561 0.8231 0.9750 0.9750
2 c234 0.8760 0.4560 0.8760
1 c234 0.4255 0.2348 0.4255
0 c561 0.9527 0.2630 0.9527
3 c561 0.4111 0.1543 0.4111