如何获得当前行与前一行相比的排名
我有一个像这样的数据框:
Instru Price Volume
ABCD 1000 100258
ABCD 1000 100252
ABCD 1000 100168
ABCD 1000 100390
ABCD 1000 100470
ABCD 1000 100420
我想获得当前行与“体积列”的所有先前行相比的排名。
所需的数据框数据:
Instru Price Volume Rank
ABCD 1000 100258 1 => 1st Row so Rank 1
ABCD 1000 100252 2 => Rank 2 (Compare 100258,100252)
ABCD 1000 100168 3 => Rank 3 (Compare 100258,100252,100168)
ABCD 1000 100390 1 => Rank 1 (Compare 100390,100258,100252,100168)
ABCD 1000 100470 1 => Rank 1 (Compare 100470,100390,100258,100252,100168)
ABCD 1000 100420 2 => Rank 2 (Compare 100470,100420,100390,100258,100252,100168)
pandas.DataFrame.rank函数不符合我的目的。
答案 0 :(得分:4)
在进行累积排序后使用np.searchsorted:
func test2() -> TestResult<Any> {
let obj: Any = TestModel()
let result = TestResult.success(obj)
return result
}
输出
df['Rank'] = np.array([i - np.searchsorted(sorted(df.Volume[:i]), v) for i, v in enumerate(df.Volume)]) + 1
print(df)
答案 1 :(得分:0)
我想不出只使用熊猫函数的方式。但是迭代计算这样的排名非常容易:
df["rank"] = [df.iloc[0:(i+1)]["Volume"].le(df.iloc[i]["Volume"]).sum() for i in range(len(df))]