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

Pandas拼接操作后如何剔除未发生变化的行?

过滤拼接后无变化行的解决方案

先完成基于Id的拼接操作,再通过字段对比筛选出存在数据差异的行:

完整代码示例

import pandas as pd

# 初始化两个目标DataFrame
df1 = pd.DataFrame({'Id':[1,2,3,4], 'Quantity':[10,20,30,40], 'Price':[100,80,90,150]})
df2 = pd.DataFrame({'Id':[1,2,3], 'Quantity':[10,25,20], 'Price':[100,75,90]})

# 基于Id拼接,用层级键区分两个数据源的字段
merged_df = pd.concat([df1.set_index('Id'), df2.set_index('Id')], axis=1, keys=['X','Y'])

# 生成筛选条件:只要Quantity或Price存在差异,或者df2中无对应Id(Y列存在空值)
mask = (merged_df['X']['Quantity'] != merged_df['Y']['Quantity']) | \
       (merged_df['X']['Price'] != merged_df['Y']['Price']) | \
       merged_df['Y'].isna().any(axis=1)

# 筛选出符合要求的行
result = merged_df[mask]
print(result)

代码说明

  • 对比X和Y层级下的Quantity、Price字段,判断是否存在数值差异
  • 若不需要保留df2中没有的Id行(比如示例中的Id=4),直接删除merged_df['Y'].isna().any(axis=1)这个条件即可
  • 最终输出的result仅包含数据有变化的行,以及df2中未覆盖的新增行

内容的提问来源于stack exchange,提问作者Vijay Pal Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:54:57