如何用Pandas检查一个DataFrame是否被另一个包含(含标签不匹配场景)
检查df2是否是df1的连续子矩阵
要实现忽略索引/列名、仅判断df2内容是否为df1中连续子矩阵的需求,可通过以下方式实现:
核心思路
- 脱离Pandas的标签约束,将两个DataFrame转为NumPy数组,专注数值内容对比
- 遍历df1中所有与df2形状一致的连续子区域,逐一对比是否完全匹配
- 找到任意匹配子块则返回
True,否则返回False
代码实现
import pandas as pd import numpy as np def is_continuous_submatrix(df1, df2): # 转换为numpy数组,剥离标签信息 arr1 = df1.to_numpy() arr2 = df2.to_numpy() rows1, cols1 = arr1.shape rows2, cols2 = arr2.shape # 若df2尺寸超过df1,直接返回False if rows2 > rows1 or cols2 > cols1: return False # 遍历所有可能的起始位置 for i in range(rows1 - rows2 + 1): for j in range(cols1 - cols2 + 1): # 截取df1对应区域的子矩阵 sub_arr = arr1[i:i+rows2, j:j+cols2] # 对比内容是否完全一致 if np.array_equal(sub_arr, arr2): return True return False # 测试示例 if __name__ == "__main__": # 构造4行5列的df1 df1 = pd.DataFrame([ [1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20] ]) # 构造df2:取自df1的连续子矩阵 df2 = pd.DataFrame([[8,9],[13,14]]) print(is_continuous_submatrix(df1, df2)) # 输出: True
补充说明
- 若需处理浮点数对比,建议用
np.allclose(sub_arr, arr2)替代np.array_equal,避免精度误差导致误判 - 该方法完全不依赖索引和列名,仅关注数值内容的连续性匹配
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

