我有以下数据集(非唯一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"考虑到了吗?
答案 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对大于零的行的排名。