python - Pandas 按条件按列值排名

标签 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” 的行,我想将“排名”值留空(或 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 给出排名。

关于python - Pandas 按条件按列值排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937652/

相关文章:

python - 如何在 PySpark 中删除 RDD 以释放资源?

python - 如何将for循环中的结果写入多个CSV文件

Python 如何使用 ExcelWriter 写入现有工作表

python - 405 不允许方法 - 在 Google App Engine 中获取请求,语言 Python

python opencv cv2.cv.CV_CAP_PROP_FRAME_COUNT 得到错误的数字

MongoDB 聚合以及使用关联集合字段进行查找和排序会减慢查询速度

Ruby:字符串与字符串的比较失败(ArgumentError)

c - 三路归并排序C程序

python - 使用 groupby 和 resample 进行 Pandas 上采样

python - seaborn 热图显示轴标签,但当 df.corr 为 NaN 时没有值