如何获得当前行与前一行相比的排名

时间:2019-02-17 13:44:07

标签: python python-3.x pandas dataframe

如何获得当前行与前一行相比的排名

我有一个像这样的数据框:

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函数不符合我的目的。

2 个答案:

答案 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))]