python pandas条件排名

时间:2017-02-02 09:29:18

标签: python regex pandas

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仅在整个集合中给出排名。

1 个答案:

答案 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}}