如何使用Pandas基于指定列筛选金额Top3值及统计游戏金额Top3
嘿,我来帮你搞定这两个Pandas数据处理的问题,都是日常分析里高频遇到的场景,直接上实操方案:
问题1:基于另一列筛选金额列的前3个数值
这里分两种常见场景,你可以根据自己的实际需求选:
场景1:按某一列分组,每组取金额前3的行
比如你有一个按「类别」分组的DataFrame,想每个类别下都提取金额最高的3条记录,用groupby+nlargest就能快速搞定:
# 假设你的DataFrame叫df,分组列是'category',金额列是'amount' # 只保留分组列和金额列的写法 top3_per_group = df.groupby('category')['amount'].nlargest(3).reset_index() # 如果需要保留所有列的完整数据,这么写: top3_per_group = df.groupby('category').apply(lambda x: x.nlargest(3, 'amount')).reset_index(drop=True)
nlargest(3, 'amount')会直接筛选出每个组里金额最大的3行,reset_index(drop=True)是为了去掉分组后生成的多级索引,让结果更清爽。
场景2:基于某列的条件筛选后,取金额前三的行
比如你只想先筛选出「状态为已完成」的记录,再从中取金额最高的3条,那就先做条件过滤,再用nlargest:
# 筛选status为'completed'的行,再取金额前三 filtered_top3 = df[df['status'] == 'completed'].nlargest(3, 'amount')
问题2:按金额维度列出排名前三的游戏
这里核心是先统计每个游戏的总金额(如果你的需求是平均金额,把sum()换成mean()就行),再排序取前三:
# 一步到位的写法:分组求和→排序→取前三 top3_games = df.groupby('game')['amount'].sum().sort_values(ascending=False).head(3).reset_index()
拆解一下逻辑:
groupby('game')['amount'].sum():按游戏分组,计算每个游戏的累计金额sort_values(ascending=False):按累计金额从高到低排序head(3):取排名前三的记录reset_index():把游戏名称从索引变回普通列,方便后续查看或导出
如果你需要更详细的信息(比如每个游戏的交易次数),可以扩展分组聚合的内容:
game_stats = df.groupby('game').agg( total_amount=('amount', 'sum'), transaction_count=('amount', 'count') ).sort_values(by='total_amount', ascending=False).head(3).reset_index()
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

