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
相关产品推荐
相关产品推荐

