例如,我有一个df
ID Name Value
0 A 10
1 A 11
3 A 15
4 B 7
5 B 11
C X 1
我想找到,对于当前行,计算有多少其他行具有相同的名称和更大的值。 预期产出;
ID Name Value Res
0 A 10 2
1 A 11 1
3 A 15 0
4 B 7 1
5 B 11 0
6 X 1 0
编辑:附加案例。仅包含在tag = 1
的count中ID Name Value Tag Res
0 A 9 1 2
1 A 10 0 2
2 A 11 1 1
3 A 15 1 0
4 B 7 1 1
5 B 11 1 0
6 X 1 1 0
答案 0 :(得分:3)
经过一些调整后,您可以将Series.rank
与method='dense'
:
>>> grouped = df.groupby("Name")["Value"]
>>> df["Res"] = grouped.rank(method="dense", ascending=False).astype(int) - 1
>>> df
ID Name Value Res
0 0 A 10 2
1 1 A 11 1
2 3 A 15 0
3 4 B 7 1
4 5 B 11 0
5 C X 1 0