按A分组选取B值最接近指定值15的单条行的技术需求
按分组筛选与指定值差值最小的行
我来帮你解决这个分组筛选最接近指定值行的问题,用Python的pandas就能轻松实现,具体步骤如下:
原始数据集
首先我们先明确待处理的原始数据:
| 索引 | A | B | C |
|---|---|---|---|
| 0 | 01:00:00 | 24 | Andrew |
| 1 | 01:00:00 | 28 | Edd |
| 2 | 01:00:00 | 17 | Emma |
| 3 | 01:00:00 | 10 | Fred |
| 4 | 02:00:00 | 11 | Andrew |
| 5 | 02:00:00 | 35 | Edd |
| 6 | 02:00:00 | 45 | Emma |
| 7 | 02:00:00 | 14 | Fred |
需求说明
我们需要按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)
最终输出结果
运行上述代码后,会得到如下结果:
| 索引 | A | B | C |
|---|---|---|---|
| 2 | 01:00:00 | 17 | Emma |
| 7 | 02:00:00 | 14 | Fred |
代码逻辑解释
- 先构造
DataFrame来存储原始数据,方便后续结构化处理; - 新增
diff列计算B值与15的绝对差,这样能统一比较每组内各数据与目标值的接近程度; - 使用
groupby结合idxmin()方法,快速定位每组中差值最小的行的索引; - 最后通过索引提取目标行,并移除临时的
diff列,得到符合需求的结果。
内容的提问来源于stack exchange,提问作者Tie_24
相关产品推荐
相关产品推荐

