Skip to main content
 首页 » 编程设计

python之Pandas 按条件按列值排名

2025年05月04日25insus

我有以下数据集(非唯一 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” 的行,我想将“排名”值留空(或 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) 

但我不知道如何考虑“国家”?

请您参考如下方法:

编辑:在对问题进行编辑之前编写,因此并不完全符合 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 

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