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

