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

pandas按section_id合并问答行在本地数据集失效如何调整代码?

问题排查与解决方案

第一步:优先排查关联键section_id匹配失效问题

你试了merge返回空DataFrame,核心原因是type=1和type=2的section_id实际没有匹配项,你手动看到的「重复」大概率是类型差异、不可见字符、空格导致的视觉一致实际值不一致。
先执行以下校验代码:

# 检查两类数据的section_id类型是否一致
print("type=1的section_id数据类型:", data.loc[data['type'] == 1, 'section_id'].dtype)
print("type=2的section_id数据类型:", data.loc[data['type'] == 2, 'section_id'].dtype)

# 取你确认存在的共同section_id,打印实际值对比
test_sid = 24339851 # 替换成你手动确认存在的section_id
print("问题行该id值:", data.loc[(data['type'] == 1) & (data['section_id'] == test_sid), 'section_id'].values)
print("回答行该id值:", data.loc[(data['type'] == 2) & (data['section_id'] == test_sid), 'section_id'].values)

如果类型不一致、或者存在空格/不可见字符,执行统一清理:

import re
# 统一转字符串,清理不可见字符、首尾空格
data['section_id'] = data['section_id'].astype(str).apply(
    lambda x: re.sub(r'[\x00-\x1F\x7F-\x9F]', '', x)
).str.strip()

第二步:优化合并逻辑

你之前的merge代码存在变量名错误(df.type未定义,应该是data.type),且没有处理多回答场景,优化后的代码如下:

# 拆分问题表、回答表
q_df = data[data['type'] == 1].copy()
a_df = data[data['type'] == 2].copy()

# 回答表只保留需要的字段,重命名避免冲突
a_df = a_df[['section_id', 'Ans', 'ans_t']].rename(columns={
    'Ans': 'Ans.1',
    'ans_t': 'ans_t.1'
})

# 若同一个section_id有多个回答,按需聚合(此处取第一个回答,可自行调整为拼接、取最新等逻辑)
a_df = a_df.groupby('section_id', as_index=False).first()

# 左连接保留所有问题行,没有对应回答的字段自动为空
merged_df = pd.merge(q_df, a_df, on='section_id', how='left')

关于非数字字段转NaN的问题

que_t、ans_t等字段如果不需要参与合并逻辑,仅用于后续计算,可以按你给出的方案替换非数字内容为NaN,不会影响合并结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:27:00