如何无顺序验证两个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
相关产品推荐
相关产品推荐

