You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas分组后的不同Side分别按升序、降序计算rank?

针对不同Side分组使用不同排序计算Rank的解决方案

你当前的代码对所有Side分组统一采用默认的升序排序计算排名,要实现不同Side用不同排序规则,可以用以下两种简洁方法:

方法一:分组自定义排序逻辑

通过groupby.apply对每个分组单独设置排序方向,灵活适配不同Side的需求:

def calculate_rank(group):
    # 根据分组的Side值确定排序方向,这里假设Side=1用降序,Side=0用升序,可按需调整
    sort_ascending = False if group['Side'].iloc[0] == 1 else True
    group['Position'] = group['Price'].rank(ascending=sort_ascending).astype('int') - 1
    return group

# 应用分组逻辑并更新DataFrame
d = d.groupby('Side', group_keys=False).apply(calculate_rank)

方法二:条件判断分别计算

直接针对不同Side单独计算排名,再用np.where合并结果,逻辑更直观:

import numpy as np

# 分别计算两个Side的排名
rank_side0 = d[d['Side'] == 0]['Price'].rank(ascending=True).astype('int') - 1
rank_side1 = d[d['Side'] == 1]['Price'].rank(ascending=False).astype('int') - 1

# 将结果赋值回Position列
d['Position'] = np.where(d['Side'] == 0, rank_side0, rank_side1)

验证说明

以你的示例数据为例:

  • Side=1的Price从0.7289到0.7298,用降序排名后减1,得到的Position从9到0,和原数据一致;
  • Side=0的Price从0.7299到0.7308,用升序排名后减1,得到的Position从0到9,也和原数据匹配。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:40:01