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

如何在DataFrame中对比分组后两类推荐状态的计数并生成结果

问题

我有如下数据集:

Reviewrecommendationgame_name
Review...goodRecommendedGame 1
Review...badNot RecommendedGame 1
worst gameNot RecommendedGame 1
Review...Not RecommendedNot RecommendedGame 1
Review...awesomeRecommendedGame 2
Review...the game is okayNot RecommendedGame 2
Review...the game is not funNot RecommendedGame 2
amazingRecommendedGame 2
Good game..it's recommendedRecommendedGame 3
Review...goodRecommendedGame 3
Review...goodRecommendedGame 3

需要按game_name分组,统计每个游戏的"Recommended"和"Not Recommended"出现次数,并根据以下规则生成汇总结果:

  • 若Recommended次数 ≥ Not Recommended次数,输出Recommended
  • 若Recommended次数 < Not Recommended次数,输出Not Recommended

预期输出:

Is_Recommendedgame_name
Not RecommendedGame 1
RecommendedGame 2
RecommendedGame 3

我尝试了这段代码,但不知道后续如何处理:

df['recommended'] = df.groupby(['game_name','recommendation'])['recommendation'].transform('count')

解决方案

方法1:交叉表统计+条件判断

先通过交叉表统计每个游戏的推荐/不推荐次数,再用np.where生成最终判断:

import pandas as pd
import numpy as np

# 统计每个游戏的推荐、不推荐次数
counts = pd.crosstab(df['game_name'], df['recommendation'])

# 根据次数对比生成结果
counts['Is_Recommended'] = np.where(
    counts['Recommended'] >= counts['Not Recommended'],
    'Recommended',
    'Not Recommended'
)

# 整理成预期格式
result = counts[['Is_Recommended']].reset_index()

方法2:分组自定义函数

直接在分组后用自定义函数计算并返回判断结果:

import pandas as pd

def judge_recommendation(group):
    rec_num = (group['recommendation'] == 'Recommended').sum()
    not_rec_num = (group['recommendation'] == 'Not Recommended').sum()
    return 'Recommended' if rec_num >= not_rec_num else 'Not Recommended'

# 分组应用函数并整理结果
result = df.groupby('game_name')\
           .apply(judge_recommendation)\
           .reset_index(name='Is_Recommended')

方法3:改进你原有的代码

你原有的代码用transform会把计数广播到每一行,后续可以通过去重和比较得到结果:

import pandas as pd
import numpy as np

# 保留你的初始代码
df['count'] = df.groupby(['game_name','recommendation'])['recommendation'].transform('count')

# 去重得到每个游戏的推荐/不推荐次数
counts_df = df[['game_name', 'recommendation', 'count']].drop_duplicates()

# 转换为宽表方便比较
counts_wide = counts_df.pivot(index='game_name', columns='recommendation', values='count').fillna(0)

# 生成判断结果
counts_wide['Is_Recommended'] = np.where(
    counts_wide['Recommended'] >= counts_wide['Not Recommended'],
    'Recommended',
    'Not Recommended'
)

result = counts_wide[['Is_Recommended']].reset_index()

运行以上任意一种方法,都能得到你预期的结果DataFrame。


内容的提问来源于stack exchange,提问作者Pooja Soneja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:59:58