如何对比两个DataFrame的value_counts结果,找出df2中出现次数更多的公司?
对比两个value_counts结果的实用方法
针对你遇到的「公司名是索引无法合并对比」的问题,直接用以下两种方法就能解决,还能快速找出df2中出现次数多于df1的公司:
方法一:重置索引后合并(直观易懂)
先把两个Series的索引(公司名)转成普通列,再合并计算:
import pandas as pd # 给两个计数结果命名,重置索引把公司名转成列 first = df1['company'].value_counts().rename('df1_count').reset_index().rename(columns={'index': 'company'}) second = df2['company'].value_counts().rename('df2_count').reset_index().rename(columns={'index': 'company'}) # 外连接合并所有公司,缺失的计数填0 comparison = pd.merge(first, second, on='company', how='outer').fillna(0) # 计算次数差值,筛选df2次数更多的公司 comparison['count_diff'] = comparison['df2_count'] - comparison['df1_count'] target_companies = comparison[comparison['df2_count'] > comparison['df1_count']] # 查看结果 print(target_companies)
方法二:利用Series索引对齐(简洁高效)
Series会自动按索引对齐,直接做运算就能快速对比:
import pandas as pd # 直接计算两个Series的差值,缺失值对应一方没有该公司的情况 count_diff = second - first # 补全缺失值:df1中没有的公司,差值等于df2的计数 count_diff = count_diff.fillna(second) # 筛选df2次数多于df1的公司(差值>0) target_companies = count_diff[count_diff > 0] # 如果需要同时查看两个计数,合并成DataFrame即可 comparison_df = pd.concat([first, second], axis=1, keys=['df1_count', 'df2_count']).fillna(0) comparison_df['count_diff'] = comparison_df['df2_count'] - comparison_df['df1_count'] target_companies_full = comparison_df[comparison_df['count_diff'] > 0] print(target_companies_full)
之前用.to_frame('counts')没解决问题,是因为只转成了DataFrame但没把索引转成列,加上.reset_index()就能把公司名从索引移到普通列里,后续合并就没问题了。
内容的提问来源于stack exchange,提问作者ArieAI
相关产品推荐
相关产品推荐

