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

按A分组选取B值最接近指定值15的单条行的技术需求

按分组筛选与指定值差值最小的行

我来帮你解决这个分组筛选最接近指定值行的问题,用Python的pandas就能轻松实现,具体步骤如下:

原始数据集

首先我们先明确待处理的原始数据:

索引ABC
001:00:0024Andrew
101:00:0028Edd
201:00:0017Emma
301:00:0010Fred
402:00:0011Andrew
502:00:0035Edd
602:00:0045Emma
702:00:0014Fred

需求说明

我们需要按A列进行分组,每组选取B值与指定值15差值最小的行:

  • A=01:00:00的组中,最接近15的B值是17(对应索引2的行)
  • A=02:00:00的组中,最接近15的B值是14(对应索引7的行)

实现代码

下面是具体的Python代码实现:

import pandas as pd

# 构造原始数据集
data = {
    'A': ['01:00:00', '01:00:00', '01:00:00', '01:00:00',
          '02:00:00', '02:00:00', '02:00:00', '02:00:00'],
    'B': [24, 28, 17, 10, 11, 35, 45, 14],
    'C': ['Andrew', 'Edd', 'Emma', 'Fred', 'Andrew', 'Edd', 'Emma', 'Fred']
}
df = pd.DataFrame(data)

# 计算B值与15的绝对差值,用于衡量接近程度
df['diff'] = abs(df['B'] - 15)

# 按A列分组,找到每组中差值最小的行的索引
target_indices = df.groupby('A')['diff'].idxmin()

# 提取目标行并移除临时的diff列
result_df = df.loc[target_indices].drop('diff', axis=1)

# 打印结果
print(result_df)

最终输出结果

运行上述代码后,会得到如下结果:

索引ABC
201:00:0017Emma
702:00:0014Fred

代码逻辑解释

  1. 先构造DataFrame来存储原始数据,方便后续结构化处理;
  2. 新增diff列计算B值与15的绝对差,这样能统一比较每组内各数据与目标值的接近程度;
  3. 使用groupby结合idxmin()方法,快速定位每组中差值最小的行的索引;
  4. 最后通过索引提取目标行,并移除临时的diff列,得到符合需求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:13:06