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

Pandas实现奇偶索引拆分的两个DataFrame对应行横向拼接

问题根源

你当前拼接错位的核心原因是拆分后的两个DataFrame索引未对齐,且reset_index()操作未生效:

  • 拆分后df1的索引为1,3,5...,df2的索引为0,2,4...,pd.concat(axis=1)会默认按索引匹配拼接,导致两行错位
  • reset_index()方法是返回新的DataFrame,你没有赋值回原变量,原有索引没有被修改

修复后代码

import os
import pandas as pd

os.chdir(output)
csv_files = os.listdir('.')
for csv_file in csv_files:
    if csv_file.endswith(".asc.csv"):
        df = pd.read_csv(csv_file)
        keep_col = ['Messpunkt', 'Zeichnungspunkt', 'Eigenschaft', 'Position', 'Sollmass','Toleranz','Abweichung','Lage']
        new_df = df[keep_col]
        # 合并过滤条件简化写法
        filter_values = ['**Teil', '**KS-Oben', '**KS-Unten', '**N']
        new_df = new_df[~new_df['Messpunkt'].isin(filter_values)].reset_index(drop=True)
        
        # 拆分奇偶行+重置索引对齐,可根据实际拆分规则调整奇偶判断条件
        df1 = new_df[new_df.index % 2 == 0].reset_index(drop=True)
        df2 = new_df[new_df.index % 2 == 1].reset_index(drop=True)
        
        # 横向拼接,处理重复列名避免同名列冲突
        df2.columns = [f"{col}_extra" for col in df2.columns]
        merge_df = pd.concat([df1, df2], axis=1)
        
        # 输出结果,关闭索引输出避免CSV多出多余索引列
        merge_df = merge_df.reset_index(drop=True)
        merge_df.to_csv(output + csv_file, index=False)

关键修改点说明

  • 给reset_index()加了drop=True参数删除原有索引,同时赋值回原变量让修改生效
  • 拆分后两个df的索引都重置为从0开始的连续整数,拼接时可以按顺序一一对应
  • 给df2的列名加了后缀避免和df1同名列冲突
  • 输出时加index=False避免CSV里多出多余的索引列

如果你的拆分规则确实是要df1存原索引的奇数行、df2存原索引的偶数行,只需要调整df1 = new_df[new_df.index % 2 == 1].reset_index(drop=True),df2 = new_df[new_df.index % 2 == 0].reset_index(drop=True)即可,核心逻辑都是重置索引对齐后再横向拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:24:03