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

如何高效过滤数据集并批量计算各起点的预算可达终点数?

高效计算每个起点在预算内的可达终点数量

当然有高效的方法!不用一个个手动处理每个起点,用pandas的分组(groupby)结合transform操作就能轻松搞定,而且完全适配大型数据集——毕竟pandas的这类操作底层是优化过的,比Python循环快得多。

核心思路

我们可以按origin分组,对每个组内的cost列统计满足cost <= 预算的行数(也就是可达终点的数量),再把这个统计结果广播到该组的每一行,这样就能新增一列展示每个起点对应的可达数量。

代码实现(统一预算场景)

假设你的数据集是用pandas DataFrame存储的,给定一个固定预算,代码如下:

import pandas as pd

# 示例数据集(替换成你的真实数据)
df = pd.DataFrame({
    'origin': ['A', 'A', 'A', 'B', 'B', 'B'],
    'destination': ['X', 'Y', 'Z', 'X', 'Y', 'Z'],
    'cost': [50, 150, 80, 90, 70, 120]
})

# 设定你的预算值
target_budget = 100

# 新增可达终点数量列
df['reachable_destinations'] = df.groupby('origin')['cost'].transform(
    lambda group: (group <= target_budget).sum()
)

# 查看结果
print(df)

这段代码会输出:

origin destination  cost  reachable_destinations
0      A           X    50                       2
1      A           Y   150                       2
2      A           Z    80                       2
3      B           X    90                       2
4      B           Y    70                       2
5      B           Z   120                       2

为什么这个方法高效?

  • 避免了Python级别的循环:groupby和transform都是pandas底层优化过的操作,用C扩展实现,处理百万级甚至更大的数据集速度远超手动遍历每个起点。
  • 自动广播结果:transform会把每个组的统计结果自动映射到该组的所有行,不需要手动合并数据。

进阶:每个起点有不同预算的场景

如果不同起点的预算不一样(比如有一个origin_budget字典),可以这样处理:

# 每个起点对应的预算
origin_budgets = {'A': 90, 'B': 110}

# 先给每行匹配对应起点的预算
df['assigned_budget'] = df['origin'].map(origin_budgets)

# 分组统计每个起点的可达数量
df['reachable_destinations'] = df.groupby('origin').apply(
    lambda g: (g['cost'] <= g['assigned_budget'].iloc[0]).sum()
).reindex(df['origin']).values

这种方法同样不需要手动循环每个起点,保证了处理大型数据集的效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:11