如何基于一个DataFrame对另一个DataFrame进行数据校验
实现方案
我们可以通过Pandas的集合运算快速实现这两个需求,前提是两个DataFrame均包含Country、City、Initiatives三列。
步骤1:导入依赖并构造测试数据
如果已有真实数据可跳过构造测试数据的部分
import pandas as pd # 表1示例数据 df1 = pd.DataFrame({ 'Country': ['India', 'India', 'USA', 'USA'], 'City': ['Bangalore', 'Bangalore', 'Texas', 'Texas'], 'Initiatives': ['Education', 'Healthcare', 'Education', 'Healthcare'] }) # 表2示例数据 df2 = pd.DataFrame({ 'Country': ['India', 'India', 'India', 'India', 'USA', 'USA', 'USA'], 'City': ['Bangalore', 'Bangalore', 'Bangalore', 'Mumbai', 'Texas', 'Texas', 'Texas'], 'Initiatives': ['Education', 'Textile', 'Irrigation', 'Healthcare', 'Education', 'Healthcare', 'Irrigation'] }) # 生成国家-城市组合标识列 df1['country_city'] = df1['Country'] + '-' + df1['City'] df2['country_city'] = df2['Country'] + '-' + df2['City']
步骤2:实现需求1:查找仅在表2存在的国家-城市组合
# 取两个表的国家-城市组合去重后求差集 df1_pairs = set(df1['country_city'].unique()) df2_pairs = set(df2['country_city'].unique()) only_df2_pairs = list(df2_pairs - df1_pairs) print(only_df2_pairs) # 输出结果:['India-Mumbai']
步骤3:实现需求2:查找共同组合下仅表2存在的举措
common_pairs = df1_pairs & df2_pairs res = {} for pair in common_pairs: df1_init_set = set(df1[df1['country_city'] == pair]['Initiatives'].unique()) df2_init_set = set(df2[df2['country_city'] == pair]['Initiatives'].unique()) diff_init = list(df2_init_set - df1_init_set) if diff_init: res[pair] = diff_init print(res) # 输出结果:{'India-Bangalore': ['Textile', 'Irrigation'], 'USA-Texas': ['Irrigation']}
内容的提问来源于stack exchange,提问作者narendra polisetty
相关产品推荐
相关产品推荐

