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

如何使用if语句基于字符串变量中的值筛选数据集并标记待保留被试

解决方法:筛选符合Practice3 DV > Practice4 DV的被试

我来帮你搞定这个数据筛选的问题!你的数据集是长格式(每个被试对应多行不同试次),核心思路是先提取每个被试的Practice3和Practice4的DV值,比较后再把结果映射回原数据集,新增include列标记是否保留。下面用Python的pandas库来实现,这是处理这类实验数据最常用的工具:

步骤1:准备示例数据

先把你给出的数据集转换成pandas数据框:

import pandas as pd

# 构造示例数据
data = [
    [1, "Practice1", 67],
    [1, "Practice2", 3],
    [1, "Practice3", 78],
    [1, "Practice4", 14],
    [1, "Test", 97],
    [1, "Test", 65],
    [1, "Test", 28],
    [1, "Test", 16],
    [1, "Test", 97],
    [1, "Test", 35],
    [2, "Practice1", 100],
    [2, "Practice2", 99],
    [2, "Practice3", 99],
    [2, "Practice4", 100],
    [2, "Test", 29],
    [2, "Test", 18],
    [2, "Test", 33],
    [2, "Test", 46],
    [2, "Test", 87],
    [2, "Test", 95]
]

df = pd.DataFrame(data, columns=["subj_id", "trial_type", "DV"])

步骤2:提取并比较Practice3和Practice4的DV值

我们先把每个被试的Practice3和Practice4的DV值转成宽格式,方便比较:

# 筛选出Practice3和Practice4的行,然后转成宽格式
practice_compare = df[df["trial_type"].isin(["Practice3", "Practice4"])]\
    .pivot(index="subj_id", columns="trial_type", values="DV")\
    .reset_index()

# 计算符合条件的标记:Practice3的DV > Practice4的DV则为1,否则为0
practice_compare["include"] = practice_compare.apply(
    lambda row: 1 if row["Practice3"] > row["Practice4"] else 0, axis=1
)

步骤3:将标记合并回原数据集

把刚才得到的include标记映射回原数据框,这样每个被试的所有行都会有对应的标记:

# 合并原数据和标记
final_df = df.merge(practice_compare[["subj_id", "include"]], on="subj_id", how="left")

结果验证

运行完上面的代码后,你会得到新增include列的数据集:

  • 被试1的Practice3(78)> Practice4(14),所以所有行的include都是1
  • 被试2的Practice3(99)< Practice4(100),所以所有行的include都是0

如果你之后需要筛选保留符合条件的被试,直接用final_df[final_df["include"] == 1]就可以啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:32:41