大熊猫按条件排列

时间:2016-08-13 22:52:49

标签: python sorting pandas

我有以下数据集(非唯一ID)

id   data  country
1    8     B
2    15    A
3    14    D
3    19    D
3    8     C
3    20    A

对于 country ANYTHING BUT" A" 的行,我想添加" rank"列。

对于国家" A" 的行,我想留下" rank"值为空(或0)。

预期产出:

id   data  country rank
1    8     B       1
2    15    A       0
3    14    D       3 
3    19    D       4
3    8     C       2
3    20    A       0

这篇文章Pandas rank by column value提供了很好的见解。

我可以尝试:

df['rank'] = df['data'].rank(ascending=True)

但我不知道如何采取" country"考虑到了吗?

1 个答案:

答案 0 :(得分:4)

编辑:在编辑问题之前编写,因此并不完全符合OP的要求。

df['rank_A'] = df.data[df['country']=='A'].rank(ascending=True)

经过测试

 import pandas as pd
 from pandas import DataFrame
 import numpy as np
 df2 = DataFrame(np.random.randn(5, 2))
 df2.columns = ['A','B']
 df2['rank'] = df2.A[df2['B']>0].rank(ascending=True)
 df2

,根据A给出B对大于零的行的排名。