我有以下数据集(非唯一 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/