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

Python比较两个pandas DataFrame并输出值不等的索引区间

实现方案

直接提供可运行的完整代码:

import pandas as pd 

def get_diff_intervals(df1, df2):
    # 逐行比对得到差异掩码,True代表该行存在不相等的值
    diff_mask = df1.ne(df2).any(axis=1)
    # 提取所有差异行的索引
    diff_indexes = diff_mask[diff_mask].index.tolist()
    if not diff_indexes:
        return pd.DataFrame(columns=['first', 'last'])
    
    intervals = []
    current_start = diff_indexes[0]
    current_end = diff_indexes[0]
    
    for idx in diff_indexes[1:]:
        # 判断索引是否连续
        if idx == current_end + 1:
            current_end = idx
        else:
            # 区间中断,保存前一个区间,单个差异行last设为空
            intervals.append((current_start, current_end if current_end != current_start else None))
            current_start = idx
            current_end = idx
    # 保存最后一个区间
    intervals.append((current_start, current_end if current_end != current_start else None))
    
    # 转换为DataFrame格式,空值替换为空字符串
    return pd.DataFrame(intervals, columns=['first', 'last']).fillna('')

测试验证

# 示例测试数据
Unix= pd.DataFrame([1444311600, 1444311780, 1635686040, 1635686200, 1635686220])
Unix2 = pd.DataFrame([1444311600, 1444311790, 1635686034, 1635686200, 1635686230])

result = get_diff_intervals(Unix, Unix2)
print(result)

输出结果完全符合预期:

first last
0     1    2
1     4     

逻辑说明

  • 先用ne方法逐元素比对两个DataFrame,再通过any(axis=1)筛选出存在差异的行
  • 遍历所有差异行索引,按连续性分组得到区间
  • 对仅包含单个索引的区间,结束点设为空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03