如何在Pandas中先过滤DataFrame再匹配统计频率并计算差异
实现方法
步骤1:过滤df2得到仅包含df1中存在的项目编号的df2_new
import pandas as pd # 示例数据构造,实际使用时替换为你自己的df1、df2即可 df1 = pd.DataFrame({'Project_Number': ['S100', 'S100', 'S200', 'S300', 'S300', 'S300', 'S400', 'S400']}) df2 = pd.DataFrame({'Project_Number': ['S100', 'S200', 'S200', 'S300', 'S300', 'S300', 'S500']}) # 过滤逻辑:仅保留df2中项目编号同时在df1里存在的行 df2_new = df2[df2['Project_Number'].isin(df1['Project_Number'])].copy()
步骤2:分别统计两个DataFrame的项目编号出现频率
# 得到索引为项目编号、值为对应出现次数的统计Series count_df1 = df1['Project_Number'].value_counts() count_df2_new = df2_new['Project_Number'].value_counts()
步骤3:合并统计结果并筛选差异项
这里用外连接合并两个统计结果,确保df1中存在但df2_new中不存在的项目(如示例的S400)也能纳入对比,缺失的计数统一填充为0,最后筛选出两个计数不相等的项目即可:
# 合并计数结果 compare_df = pd.merge( count_df1.reset_index(name='count1'), count_df2_new.reset_index(name='count2'), on='Project_Number', how='outer' ).fillna(0) # 筛选计数不等的差异项目 df_difference = compare_df.loc[compare_df['count1'] != compare_df['count2'], ['Project_Number']].reset_index(drop=True)
运行print(df_difference)即可得到你需要的输出结果。
内容的提问来源于stack exchange,提问作者Shivika
相关产品推荐
相关产品推荐

