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

如何使用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()

拆解一下逻辑:

  1. groupby('game')['amount'].sum():按游戏分组,计算每个游戏的累计金额
  2. sort_values(ascending=False):按累计金额从高到低排序
  3. head(3):取排名前三的记录
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:27:52