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

Pandas合并CSV文件 对齐同名条目计算数值差值

问题根因

用pd.concat做横向拼接是按行位置硬绑定,不会根据Names字段做匹配对齐,只要两个表的条目顺序不一致、存在单表独有条目,必然出现行错位,你遇到的pineapple条目串位、差值计算错误就是这个逻辑导致的。

实现方案

核心是用外连接(outer join) 替代横向拼接,按名称字段做匹配合并,单独拆分处理总计行避免匹配逻辑干扰,步骤如下:

  • 读入Q1、Q2数据后分别重命名列,给两个表的同名列加上季度前缀,避免列名冲突
  • 提前把两个表的总计行拆分出来单独存放,剩下的普通业务条目走合并逻辑
  • 对普通条目做外连接合并,自动把同名条目对齐到同一行,两个季度独有的条目也会单独成行不会丢失
  • 按规则填充缺失值:Q2独有行的Q1Count填0、Q1Names留空;Q1独有行的Q2Count填0、Q2Names留空
  • 逐行计算差值列,单独计算总计行的差值后拼接到结果末尾,调整列顺序导出即可
可直接复用的代码
import pandas as pd

# 1. 读入数据并重命名列
df_q1 = pd.read_csv("q1_stats.csv").rename(columns={"Names": "Q1Names", "Count": "Q1Count"})
df_q2 = pd.read_csv("q2_stats.csv").rename(columns={"Names": "Q2Names", "Count": "Q2Count"})

# 2. 拆分总计行(如果你的总计行名称不是"总计",替换成实际值即可)
q1_total = df_q1[df_q1["Q1Names"] == "总计"]
q2_total = df_q2[df_q2["Q2Names"] == "总计"]
df_q1_data = df_q1[df_q1["Q1Names"] != "总计"]
df_q2_data = df_q2[df_q2["Q2Names"] != "总计"]

# 3. 外连接按名称对齐条目
merged_data = pd.merge(
    df_q1_data,
    df_q2_data,
    left_on="Q1Names",
    right_on="Q2Names",
    how="outer"
)

# 4. 按规则填充缺失值
merged_data["Q1Count"] = merged_data["Q1Count"].fillna(0)
merged_data["Q1Names"] = merged_data["Q1Names"].fillna("")
merged_data["Q2Count"] = merged_data["Q2Count"].fillna(0)
merged_data["Q2Names"] = merged_data["Q2Names"].fillna("")

# 5. 计算普通行差值
merged_data["Difference"] = merged_data["Q2Count"] - merged_data["Q1Count"]

# 6. 处理总计行差值
q1_total_cnt = q1_total["Q1Count"].iloc[0] if not q1_total.empty else 0
q2_total_cnt = q2_total["Q2Count"].iloc[0] if not q2_total.empty else 0
total_row = pd.DataFrame([{
    "Q1Names": "总计" if not q1_total.empty else "",
    "Q1Count": q1_total_cnt,
    "Q2Names": "总计" if not q2_total.empty else "",
    "Q2Count": q2_total_cnt,
    "Difference": q2_total_cnt - q1_total_cnt
}])

# 7. 拼接结果、调整列顺序后导出
final_result = pd.concat([merged_data, total_row], ignore_index=True)[
    ["Q1Names", "Q1Count", "Q2Names", "Q2Count", "Difference"]
]
final_result.to_csv("quarter_count_diff.csv", index=False, encoding="utf-8-sig")
效果说明
  • 所有同名条目自动对齐,不会出现行错位问题,pineapple这类Q2独有条目会自动补全Q1侧的0值和空名称
  • 原文件的总计行完整保留在结果末尾,差值计算逻辑和普通条目一致
  • 导出文件用utf-8-sig编码,直接用Excel打开不会出现中文乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:31:09