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

基于Candidate_Name列展平Pandas DataFrame,merge方法未获预期结果求助

基于Candidate_Name列展平Pandas DataFrame的正确方法

嗨,我来帮你搞定这个问题~你用df.merge(df, on=('Candidate_Name'))没得到预期结果,是因为这个操作会生成笛卡尔积——同一个Candidate_Name下的每一行都会和同组的所有行配对,最终得到的是大量重复组合的行,完全不是你想要的「合并同名字为单行」的效果。

下面是实现你需求的正确步骤:

核心思路

给每个Candidate_Name分组内的行添加唯一序号,然后通过透视(pivot)操作把多行转成同一行的多列,自动给重复的列名添加后缀(比如_0、_1),最终实现展平效果。

具体代码示例

假设你的原始DataFrame长这样:

import pandas as pd

# 示例数据
data = {
    'Candidate_Name': ['Alice', 'Alice', 'Bob', 'Bob', 'Bob'],
    'Skill': ['Python', 'SQL', 'Java', 'C++', 'JavaScript'],
    'Experience': [3, 2, 5, 4, 1],
    'Location': ['NY', 'NY', 'CA', 'CA', 'CA']
}
df = pd.DataFrame(data)

执行以下代码完成展平:

# 1. 给每个候选者的行添加分组内的序号
df['row_index'] = df.groupby('Candidate_Name').cumcount()

# 2. 透视表:把行转成列,以Candidate_Name为索引,序号为列
flattened_df = df.pivot(index='Candidate_Name', columns='row_index')

# 3. 把多级列名合并为单级(比如Skill_0、Experience_1)
flattened_df.columns = ['_'.join(map(str, col)) for col in flattened_df.columns]

# 4. 重置索引,让Candidate_Name回到列的位置
flattened_df = flattened_df.reset_index()

最终输出效果

处理后的DataFrame会把同一个Candidate_Name的所有行合并为单行,重复列名自动带上序号后缀:

Candidate_Name Skill_0 Skill_1 Skill_2 Experience_0 Experience_1 Experience_2 Location_0 Location_1 Location_2
0          Alice  Python     SQL     NaN            3            2          NaN         NY         NY        NaN
1            Bob    Java     C++ JavaScript            5            4            1         CA         CA         CA

补充说明

  • 如果你的数据中有完全重复的行,可以先通过df.drop_duplicates(subset=['Candidate_Name'])去重后再执行上述步骤
  • 如果你偏好_x、_y这类后缀而不是序号,可以把cumcount()生成的序号替换成自定义的标记(比如['x', 'y', 'z']),不过序号的方式更通用,适配任意数量的行

内容的提问来源于stack exchange,提问作者noobie-php

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:04:09