Как получить Ранг текущей строки по сравнению с предыдущими строками - PullRequest
0 голосов
/ 17 февраля 2019

Как получить ранг текущей строки по сравнению с предыдущими строками

У меня есть такой фрейм данных:

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 голосов
/ 17 февраля 2019

Использовать np.searchsorted после кумулятивной сортировки :

df['Rank'] = np.array([i - np.searchsorted(sorted(df.Volume[:i]), v) for i, v in enumerate(df.Volume)]) + 1
print(df)

Выход

  Instru  Price  Volume  Rank
0   ABCD   1000  100258     1
1   ABCD   1000  100252     2
2   ABCD   1000  100168     3
3   ABCD   1000  100390     1
4   ABCD   1000  100470     1
5   ABCD   1000  100420     2
0 голосов
/ 17 февраля 2019

Я не могу придумать, как использовать только функции панд.Но вычисление такого ранга итеративно довольно просто:

df["rank"] = [df.iloc[0:(i+1)]["Volume"].le(df.iloc[i]["Volume"]).sum() for i in range(len(df))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...