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

Pandas:统计当前实验参与者后续实验的排名提升情况(第一部分)

实现方案

核心思路

要解决这个问题,我们需要把每个参与者的跨实验排名关联起来,判断其后续实验的排名变化,再按当前实验分组统计目标指标。具体步骤如下:

  1. 明确实验顺序(A→B→C),避免后续匹配出错
  2. 为每个参与者按实验顺序排序,关联其下一个实验的排名
  3. 标记出排名提升和进入最高排名的情况
  4. 按当前实验分组统计符合条件的人数

代码实现

假设你已经加载了df_learning这个DataFrame,执行以下代码:

import pandas as pd

# 1. 定义实验顺序,转换为有序类别保证排序逻辑正确
experiment_order = ['A', 'B', 'C']
df_learning['Experiment'] = pd.Categorical(
    df_learning['Experiment'], 
    categories=experiment_order, 
    ordered=True
)

# 2. 按参与者和实验排序,关联后续实验的排名与实验名称
df_sorted = df_learning.sort_values(['Subject', 'Experiment'])
df_sorted['Next_Rank'] = df_sorted.groupby('Subject')['Rank'].shift(-1)
df_sorted['Next_Experiment'] = df_sorted.groupby('Subject')['Experiment'].shift(-1)

# 3. 标记排名提升和进入最高排名的情况
# 排名提升:后续排名 < 当前排名(Rank越小越靠前),且存在后续实验
df_sorted['Rank_Improved'] = (df_sorted['Next_Rank'] < df_sorted['Rank']) & df_sorted['Next_Rank'].notna()
# 进入最高排名:后续排名等于1,且存在后续实验
df_sorted['Reached_Top'] = (df_sorted['Next_Rank'] == 1) & df_sorted['Next_Rank'].notna()

# 4. 按实验分组统计结果
result = df_sorted.groupby('Experiment').agg(
    总参与者数=('Subject', 'nunique'),
    排名提升人数=('Rank_Improved', 'sum'),
    后续进入最高排名人数=('Reached_Top', 'sum')
).reset_index()

print(result)

输出结果说明

运行代码后会得到如下统计结果:

Experiment总参与者数排名提升人数后续进入最高排名人数
A520
B711
C300
  • 实验A:Charlie(排名从3→2)、Echo(排名从5→3)实现排名提升,无人后续进入Rank1
  • 实验B:Juliet(排名从7→1)既实现排名提升,又进入了最高排名
  • 实验C:无后续实验,两项计数均为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:55:45