以下是样本DF:
id sim sub_group sub_group_rank
a. 0.90 4 1
a. 0.87 2 1
a. 0.80 3 2
a. 0.75 1 1
a. 0.73 3 3
a. 0.70 5 1
a. 0.68 3 1
b. 0.90 1 2
b. 0.87 2 2
b. 0.80 2 1
b. 0.75 3 1
b. 0.73 4 1
b. 0.70 5 1
b. 0.68 1 1
这里是逻辑:
id
和sim
排序id
内的顺序,并仅基于sub_group
中的行对sub_group_rank
中的行重新排序。看一下sub_group
a中id
3的重新排序方式。 更新的DF:
id sim sub_group sub_group_rank
a. 0.90 4 1
a. 0.87 2 1
a. 0.68 3 1
a. 0.75 1 1
a. 0.80 3 2
a. 0.70 5 1
a. 0.73 3 3
b. 0.68 1 1
b. 0.80 2 1
b. 0.87 2 2
b. 0.75 3 1
b. 0.73 4 1
b. 0.70 5 1
b. 0.90 1 2
我不太确定如何在熊猫中做到这一点。
任何帮助将不胜感激。
答案 0 :(得分:0)
IIUC:
df.loc[(df.groupby(['id','sub_group'])
.sub_group_rank.transform(lambda x: x.sort_values().index)
)]
输出:
id sim sub_group sub_group_rank
0 a. 0.90 4 1
1 a. 0.87 2 1
6 a. 0.68 3 1
3 a. 0.75 1 1
2 a. 0.80 3 2
5 a. 0.70 5 1
4 a. 0.73 3 3
13 b. 0.68 1 1
9 b. 0.80 2 1
8 b. 0.87 2 2
10 b. 0.75 3 1
11 b. 0.73 4 1
12 b. 0.70 5 1
7 b. 0.90 1 2