You need to enable JavaScript to run this app. 如何选取block分组首行定义试验条件并重组组内后续行数据
优惠活动
大模型
产品
解决方案
定价
更多

如何选取block分组首行定义试验条件并重组组内后续行数据

实现方案

Python Pandas 版本

import pandas as pd

# 原始数据读入示例,你可以替换成自己的读入代码
df = pd.DataFrame({
    "trialcode": ["AM2A3", "Empathy", "ToM", "Transfer", "AM2D1", "Empathy", "ToM", "Transfer", "AM4M1", "Empathy", "ToM", "Transfer"],
    "response": [0, 1, 4, 2.5, 0, 4, 2, 6, 0, 6, 6, 10],
    "block": [1,1,1,1,2,2,2,2,3,3,3,3]
})

# 按block分组标记行号,0号是条件行,其余是因变量行
df["row_idx"] = df.groupby("block").cumcount()

# 提取每个block对应的条件
cond_df = df.query("row_idx == 0")[["block", "trialcode"]].rename(columns={"trialcode": "condition"})

# 因变量行转宽表
dv_df = df.query("row_idx > 0").pivot(index="block", columns="trialcode", values="response").reset_index()

# 合并表并调整列顺序
result = pd.merge(dv_df, cond_df, on="block")[["Empathy", "ToM", "Transfer", "condition", "block"]]

R Tidyverse 版本

library(tidyverse)

# 原始数据读入示例,可替换为自己的读入代码
df <- tibble(
  trialcode = c("AM2A3", "Empathy", "ToM", "Transfer", "AM2D1", "Empathy", "ToM", "Transfer", "AM4M1", "Empathy", "ToM", "Transfer"),
  response = c(0, 1, 4, 2.5, 0, 4, 2, 6, 0, 6, 6, 10),
  block = c(1,1,1,1,2,2,2,2,3,3,3,3)
)

result <- df %>%
  group_by(block) %>%
  mutate(
    condition = first(trialcode),
    row_idx = row_number()
  ) %>%
  filter(row_idx > 1) %>%
  select(-row_idx) %>%
  pivot_wider(names_from = trialcode, values_from = response) %>%
  ungroup() %>%
  select(Empathy, ToM, Transfer, condition, block)

两种方法输出的结果和你要求的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:24:03