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

如何无顺序验证两个Pandas DataFrame中元素的存在性?

验证Pandas DataFrame元素是否存在于另一个DataFrame中

嘿,作为数据科学新手遇到这种元素匹配问题很正常,我来帮你梳理清楚怎么解决!你提到的是**矩阵(二维DataFrame)**的元素级验证,而不是向量匹配,那我们一步步来:

先从你的向量例子入手

你举的例子:df1 = [1,2,8,6],df2 = [5,2,6,9],如果把它们转成一维DataFrame,验证每个元素是否存在的话,可以这么做:

import pandas as pd

# 转成一维DataFrame
df1 = pd.DataFrame([1,2,8,6], columns=['values'])
df2 = pd.DataFrame([5,2,6,9], columns=['values'])

# 检查每个元素是否在df2中
df1['exists_in_df2'] = df1['values'].isin(df2['values'])
print(df1)

输出会是:

values  exists_in_df2
0       1          False
1       2           True
2       8          False
3       6           True

完全符合你要的结果!

重点:二维矩阵(DataFrame)的元素级验证

如果你的两个数据都是二维的(比如多行多列的矩阵),比如:

# 示例二维DataFrame
df1 = pd.DataFrame([[1, 10], [8, 6]])
df2 = pd.DataFrame([[5, 2], [6, 10]])

要检查df1里每一个元素是否存在于df2中,我们需要先把df2的所有元素转换成一维数组,再用isin()方法做元素级检查:

# 把df2的所有元素扁平化(转成一维数组)
df2_all_values = df2.values.flatten()

# 对df1的每个元素做存在性验证,得到同形状的布尔矩阵
result_matrix = df1.isin(df2_all_values)
print(result_matrix)

输出会是:

0      1
0  False   True
1  False   True

这个布尔矩阵和df1的形状完全一致,每个位置的True/False对应原元素是否在df2中存在。

结合你的代码场景优化

你提到已经读取了Excel文件到priority_dataframe,那直接套用上面的方法就行:

import pandas as pd
import numpy as np

# 读取你的优先级DataFrame(注意index_col=None,避免把第一列当成索引)
priority_dataframe = pd.read_excel(prioritylist_file_path, sheet_name='Sheet1', index_col=None)

# 假设你的另一个目标DataFrame是target_df,替换成你实际的读取/创建方式
target_df = pd.read_excel("your_target_file.xlsx")  # 示例

# 扁平化目标DataFrame的所有元素
target_all_values = target_df.values.flatten()

# 生成元素级的存在性验证结果
element_exists = priority_dataframe.isin(target_all_values)

# 如果你想把结果和原数据合并查看,可以这么做
combined_result = priority_dataframe.copy()
# 把布尔矩阵展开成列(适合查看每行每个元素的结果)
for col in combined_result.columns:
    combined_result[f"{col}_exists"] = element_exists[col]

print(combined_result)

额外小技巧

  • 如果你只想提取priority_dataframe中存在于目标DataFrame的元素,可以用布尔索引:
    existing_elements = priority_dataframe[element_exists]
    
  • 如果你需要统计每行/每列有多少元素存在,可以用sum():
    # 统计每行存在的元素数量
    row_exists_count = element_exists.sum(axis=1)
    # 统计每列存在的元素数量
    col_exists_count = element_exists.sum(axis=0)
    

内容的提问来源于stack exchange,提问作者Piyush S. Wanare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:11:08