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

如何在Pandas中对含重复_REACTION TIME_字段的DataFrame聚合透视

解决Pandas部分重复字段的宽格式转换问题

步骤说明

核心思路是给重复出现的_REACTION TIME_字段按ID内的出现顺序添加序号,再将长格式数据转成宽格式。

代码实现

首先构造示例数据(如果已有DataFrame可跳过这一步):

import pandas as pd

data = [
    [1, 'consent', 'yes'],
    [1, '_REACTION TIME_', 5547],
    [1, 'age', 24],
    [1, 'gender', 'X'],
    [1, '_REACTION TIME_', 45396],
    [1, 'education', 'uni'],
    [1, 'language', 'EN'],
    [1, '_REACTION TIME_', 105187],
    [2, 'consent', 'yes'],
    [2, '_REACTION TIME_', 3547],
    [2, 'age', 25],
    [2, 'gender', 'F'],
    [2, '_REACTION TIME_', 42396],
    [2, 'education', 'uni'],
    [2, 'language', 'EU'],
    [2, '_REACTION TIME_', 115427]
]

df = pd.DataFrame(data, columns=['id', 'Field_name', 'Field_value'])

接下来执行转换操作:

# 1. 给每个ID下的重复字段添加序号
df['seq'] = df.groupby(['id', 'Field_name']).cumcount() + 1

# 2. 生成新列名:仅给_REACTION TIME_添加序号,其他字段保留原名
df['col_name'] = df.apply(
    lambda row: f"{row['Field_name']}_{row['seq']}" if row['Field_name'] == '_REACTION TIME_' else row['Field_name'],
    axis=1
)

# 3. 转成宽格式
wide_df = df.pivot(index='id', columns='col_name', values='Field_value').reset_index()

# 4. 调整列顺序(和示例对齐,可选)
target_cols = [
    'id', 'consent', '_REACTION TIME_1', 'age', 'gender', '_REACTION TIME_2',
    'education', 'language', '_REACTION TIME_3'
]
wide_df = wide_df[target_cols]

输出结果

运行后得到的wide_df就是你需要的格式:

id consent _REACTION TIME_1 age gender _REACTION TIME_2 education language _REACTION TIME_3
0   1     yes             5547  24      X            45396       uni       EN          105187
1   2     yes             3547  25      F            42396       uni       EU          115427

关键逻辑说明

  • groupby(['id', 'Field_name']).cumcount():给每个ID下的同名字段按出现顺序编号,确保重复的_REACTION TIME_能区分开。
  • 自定义列名:只给重复的目标字段加序号,避免其他唯一字段出现多余后缀。
  • pivot方法:直接将长格式数据转成每行对应一个ID的宽格式,自动聚合唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:32:27