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

Pandas如何基于另一列匹配值生成重复指定列值的新列

实现方案

核心需求是将指定问题的答案按submission_id关联到同组所有行,直接用pandas内置的分组或映射操作即可实现,无需手动枚举提交记录,适配任意提交量。

推荐实现方法(二选一即可)

方法1:映射表法(性能最优,代码简洁)

先为每个问题构造submission_id到答案的映射字典,再直接给新列赋值:

# 生成性别列(对应question_id = a)
sex_map = df[df['question_id'] == 'a'].set_index('submission_id')['answer'].to_dict()
df['sex'] = df['submission_id'].map(sex_map)

# 生成最喜欢的动物列(对应question_id = b)
animal_map = df[df['question_id'] == 'b'].set_index('submission_id')['answer'].to_dict()
df['favorite_animal'] = df['submission_id'].map(animal_map)

方法2:分组补全法(逻辑直观)

先提取对应问题的答案,再按submission_id分组补全同组的空值:

# 生成性别列
df['sex'] = df[df['question_id'] == 'a'].groupby('submission_id')['answer'].transform('first')
df['sex'] = df.groupby('submission_id')['sex'].ffill().bfill()

# 生成最喜欢的动物列
df['favorite_animal'] = df[df['question_id'] == 'b'].groupby('submission_id')['answer'].transform('first')
df['favorite_animal'] = df.groupby('submission_id')['favorite_animal'].ffill().bfill()

原有错误写法原因说明

你写的lambda中用了带循环的圆括号表达式,这是Python的生成器语法,所以每个单元格返回的都是生成器对象而非实际值。且逐行apply的性能远低于上述向量化操作,不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:57:00