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

基于列名条件创建Pandas DataFrame:处理重复列行复制需求

Pandas处理重复列转重复行的实现方案

需求背景

作为Python新手,我需要合并多个包含_duplicate后缀重复列的DataFrame,目标是将这些重复列转换为重复行,而非保留列结构。指定的唯一列名列表为:List_of_columns = ["a", "b", "c", "d", "id"]

示例数据

DataFrame 1 (X)

aba_duplicateb_duplicatecid
12345id1

DataFrame 2 (Y)

aca_duplicatec_duplicatedid
678910id2

期望输出

abcdid
125Nullid1
345Nullid1
6Null710id2
8Null910id2

注:原期望输出中第四行的c值为7,应为笔误,按逻辑应取c_duplicate的9,代码实现将按正确逻辑生成结果

代码实现

import pandas as pd

def process_duplicate_cols(df, base_cols):
    processed_rows = []
    # 遍历每一行,生成原始行和重复行
    for _, row in df.iterrows():
        # 生成原始行:取非重复列的值,不存在的列设为缺失值
        original_row = {col: row[col] if col in df.columns else pd.NA for col in base_cols}
        processed_rows.append(original_row)
        
        # 生成重复行:优先取_duplicate列的值,无对应_duplicate列的保留原始值
        duplicate_row = {}
        for col in base_cols:
            dup_col = f"{col}_duplicate"
            if dup_col in df.columns:
                duplicate_row[col] = row[dup_col]
            else:
                duplicate_row[col] = row[col] if col in df.columns else pd.NA
        processed_rows.append(duplicate_row)
    
    return pd.DataFrame(processed_rows)

# 创建示例DataFrame
X = pd.DataFrame({
    "a": [1],
    "b": [2],
    "a_duplicate": [3],
    "b_duplicate": [4],
    "c": [5],
    "id": ["id1"]
})

Y = pd.DataFrame({
    "a": [6],
    "c": [7],
    "a_duplicate": [8],
    "c_duplicate": [9],
    "d": [10],
    "id": ["id2"]
})

List_of_columns = ["a", "b", "c", "d", "id"]

# 处理每个DataFrame并合并
processed_X = process_duplicate_cols(X, List_of_columns)
processed_Y = process_duplicate_cols(Y, List_of_columns)
final_df = pd.concat([processed_X, processed_Y], ignore_index=True)

print(final_df)

代码说明

  1. process_duplicate_cols函数:
    • 遍历输入DataFrame的每一行,先生成基于原始列的行
    • 再生成基于_duplicate列的重复行,无对应重复列的字段保留原始行的值
    • 将所有生成的行转为DataFrame返回
  2. 合并处理结果:用pd.concat将多个处理后的DataFrame合并为最终结果

运行结果

a     b  c     d   id
0  1     2  5  <NA>  id1
1  3     4  5  <NA>  id1
2  6  <NA>  7    10  id2
3  8  <NA>  9    10  id2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:54:24