考虑一个数据帧有三列:group_ID,item_ID和value.假设我们共有10 itemIDs个.
我需要每一个排名item_ID(1〜10)内各group_ID基础上value,再看到平均等级(和其它数据)跨群体(如用的ID 最高的各组值会得到等级越接近1).我怎么能在熊猫中做到这一点?
这个答案非常接近qcut,但并不完全相同.
数据示例如下所示:
group_ID item_ID value
0 0S00A1HZEy AB 10
1 0S00A1HZEy AY 4
2 0S00A1HZEy AC 35
3 0S03jpFRaC AY 90
4 0S03jpFRaC A5 3
5 0S03jpFRaC A3 10
6 0S03jpFRaC A2 8
7 0S03jpFRaC A4 9
8 0S03jpFRaC A6 2
9 0S03jpFRaC AX 0
Run Code Online (Sandbox Code Playgroud)
这将导致:
group_ID item_ID rank
0 0S00A1HZEy AB 2
1 0S00A1HZEy AY 3
2 0S00A1HZEy AC 1
3 0S03jpFRaC AY 1
4 0S03jpFRaC A5 5
5 0S03jpFRaC A3 2
6 0S03jpFRaC A2 4
7 0S03jpFRaC A4 3
8 0S03jpFRaC A6 6
9 0S03jpFRaC AX 7
Run Code Online (Sandbox Code Playgroud)
DSM*_*DSM 19
你可以传递许多不同的论点rank; rank("dense", ascending=False)在执行以下操作后,您可以使用它来获得所需的结果groupby:
>>> df["rank"] = df.groupby("group_ID")["value"].rank("dense", ascending=False)
>>> df
group_ID item_ID value rank
0 0S00A1HZEy AB 10 2
1 0S00A1HZEy AY 4 3
2 0S00A1HZEy AC 35 1
3 0S03jpFRaS AY 90 1
4 0S03jpFRaS A5 3 5
5 0S03jpFRaS A3 10 2
6 0S03jpFRaS A2 8 4
7 0S03jpFRaS A4 9 3
8 0S03jpFRaS A6 2 6
9 0S03jpFRaS AX 0 7
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您没有使用全局排名方案,那么找出跨组的平均排名并不是很有意义 - 除非组中存在重复值(因此您有重复的排名值)所有您正在做的事情衡量一组中有多少元素.
| 归档时间: |
|
| 查看次数: |
18763 次 |
| 最近记录: |