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

如何实现按Location分组并聚合每组Top3 KG记录的总和

解决方案:按分组筛选TopN记录后聚合求和

我完全理解你的需求:按Location分组后,仅保留每组中KG值最高的前3条记录,再对这部分记录的KG和Dollars字段求和。用Python的pandas库可以轻松实现这个逻辑,下面分步骤给你拆解:

步骤1:准备测试数据集

先把你的原始数据转换成pandas DataFrame:

import pandas as pd

# 构造原始数据
data = [
    ["BKK", 7, 2],
    ["BKK", 5, 3],
    ["BKK", 4, 2],
    ["BKK", 3, 3],
    ["BKK", 2, 2],
    ["HKG", 8, 3],
    ["HKG", 6, 2],
    ["HKG", 4, 3],
    ["HKG", 3, 2],
    ["HKG", 2, 3],
]
df = pd.DataFrame(data, columns=["Location", "KG", "Dollars"])

步骤2:筛选每组Top3的KG记录

这里有两种实现方式,分别适合不同规模的数据集:

方式一:适合小规模数据(直观易懂)

用groupby()结合apply(),在每个分组内按KG降序排序后取前3行:

# 分组后筛选每组Top3的KG记录
top3_df = df.groupby("Location").apply(
    lambda x: x.sort_values("KG", ascending=False).head(3)
).reset_index(drop=True)

执行后会得到每个Location下KG最高的3条记录:

Location  KG  Dollars
0      BKK   7        2
1      BKK   5        3
2      BKK   4        2
3      HKG   8        3
4      HKG   6        2
5      HKG   4        3

方式二:适合大规模数据(性能更优)

如果数据集很大,apply()的效率会偏低,推荐用rank()标记每组内的排名,再筛选排名≤3的记录:

# 给每组内的KG按降序排名(method="first"避免并列值重复排名)
df["kg_rank"] = df.groupby("Location")["KG"].rank(ascending=False, method="first")
# 筛选排名前3的记录
top3_df = df[df["kg_rank"] <= 3]

步骤3:对筛选后的结果聚合求和

最后按Location分组,对KG和Dollars字段求和:

result = top3_df.groupby("Location").agg({"KG": "sum", "Dollars": "sum"}).reset_index()

输出结果完全符合你的预期:

Location  KG  Dollars
0      BKK  16        7
1      HKG  18        8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:23