在CTR比賽中畏鼓,我們常常會使用“第幾次交互”嘿悬、“倒數(shù)第幾次交互”等特征锋爪,這就需要使用到排序功能副硅。
rank函數(shù)極為方便姥宝。
rank函數(shù)返回從小到大排序的下標(biāo)
df = pd.DataFrame({'A':['a','b']*4, 'B':[4,6,2,8,5,2,9,1]})
df['rank'] = df.groupby('A')['B'].rank()
print(df)
A B rank
0 a 4 2.0
1 b 6 3.0
2 a 2 1.0
3 b 8 4.0
4 a 5 3.0
5 b 2 2.0
6 a 9 4.0
7 b 1 1.0
-
rank
函數(shù)有method
參數(shù),下表展示了該參數(shù)的選項恐疲,默認(rèn)為average
腊满,該參數(shù)在含有重復(fù)值時候能顯露出來
image.png method
=average
默認(rèn)設(shè)置: 相同的值占據(jù)前兩名,分不出誰是1誰是2培己,那么去中值即1.5碳蛋,下面一名為第三名
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank()
print(df)
A rank
0 1 1.5
1 1 1.5
2 2 3.5
3 2 3.5
4 3 5.5
5 3 5.5
6 4 7.5
7 4 7.5
-
method
=max
: 兩人并列第 2 名,下一個人是第 3 名省咨。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='max')
print(df)
A rank
0 1 2.0
1 1 2.0
2 2 4.0
3 2 4.0
4 3 6.0
5 3 6.0
6 4 8.0
7 4 8.0
-
method
=min
: 兩人并列第 1 名肃弟,下一個人是第 3 名。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='min')
print(df)
A rank
0 1 1.0
1 1 1.0
2 2 3.0
3 2 3.0
4 3 5.0
5 3 5.0
6 4 7.0
7 4 7.0
-
method
=dense
: 兩人并列第1名零蓉,下一個人是第 2 名笤受。
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='dense')
print(df)
A rank
0 1 1.0
1 1 1.0
2 2 2.0
3 2 2.0
4 3 3.0
5 3 3.0
6 4 4.0
7 4 4.0
-
method
=first
: 相同值會按照其在序列中的相對位置定值
df = pd.DataFrame({'A':[1,4,3,2,2,3,4,1]})
df['rank'] = df.A.rank(method='first')
print(df)
A rank
0 1 1.0
1 4 7.0
2 3 5.0
3 2 3.0
4 2 4.0
5 3 6.0
6 4 8.0
7 1 2.0
- 如果需要進行倒序,使用參數(shù)
ascending=False
df = pd.DataFrame({'A':[1,1,2,2,3,3,4,4]})
df['rank'] = df.A.rank(method='max',ascending=False)
print(df)
A rank
0 1 8.0
1 1 8.0
2 2 6.0
3 2 6.0
4 3 4.0
5 3 4.0
6 4 2.0
7 4 2.0