A1 1
A2 2
A3 1.5
B1 1
B2 -2
B3 2
B4 -1.5
现在我想要在每个正则表达式A *,B *等中输出等级,
A1 1 3
A2 2 1
A3 1.5 2
B1 1 2
B2 -2 4
B3 2 1
B4 -1.5 3
如何使用pandas内置功能直接实现此功能,因为.rank仅在整个集合中给出排名。
答案 0 :(得分:1)
您可以groupby
使用extract
创建的Series
print (df)
a b
0 A1 1.0
1 A2 2.0
2 A3 1.5
3 B1 1.0
4 B2 -2.0
5 B3 2.0
6 B4 -1.5
a = df.a.str.extract('([a-zA-Z])', expand=False)
print (a)
0 A
1 A
2 A
3 B
4 B
5 B
6 B
Name: a, dtype: object
df['c'] = df.groupby(a).b.rank(method='dense', ascending=False).astype(int)
print (df)
a b c
0 A1 1.0 3
1 A2 2.0 1
2 A3 1.5 2
3 B1 1.0 2
4 B2 -2.0 4
5 B3 2.0 1
6 B4 -1.5 3
使用{{1}}:
{{1}}