Python groupby 在两个不同方向上排名

问题描述 投票:0回答:1

我有一个数据框,

d

    Position    Operation   Side    Price   Size
9   9   0   1   0.7289  -16
8   8   0   1   0.729   -427
7   7   0   1   0.7291  -267
6   6   0   1   0.7292  -15
5   5   0   1   0.7293  -16
4   4   0   1   0.7294  -16
3   3   0   1   0.7295  -426
2   2   0   1   0.7296  -8
1   1   0   1   0.7297  -14
0   0   0   1   0.7298  -37
10  0   0   0   0.7299  6
11  1   0   0   0.73    34
12  2   0   0   0.7301  7
13  3   0   0   0.7302  9
14  4   0   0   0.7303  16
15  5   0   0   0.7304  15
16  6   0   0   0.7305  429
17  7   0   0   0.7306  16
18  8   0   0   0.7307  265
19  9   0   0   0.7308  18

使用以下内容更新

d
来重新计算
Position
:

d['Position'] = d.groupby('Side')['Price'].rank().astype('int').sub(1)

但是由于每个

Side
分组的排序顺序不同,有没有办法对一组进行
ascending
排序,对另一组进行
descending
排序?

python pandas dataframe group-by
1个回答
0
投票

您可以使用

groupby.apply
访问
group.name
:

d.groupby('Side')['Price'].apply(lambda x: x.rank(ascending=g.name==1).astype('int').sub(1))
© www.soinside.com 2019 - 2024. All rights reserved.