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

如何基于另一DataFrame筛选邮编匹配且表计数量差±2的行

问题与解决思路

现有数据

DataFrame 1: studyarea_pcdn

POSTCODE    Number of meters
0   NE4 9UP     41
1   NE4 9UN     32
2   NE4 9UL     29
3   NE4 9EN     27
4   NE4 9DY     25
5   NE4 9ED     22
6   NE4 9EL     18
7   NE4 9EE     13
8   NE4 9UJ     11
9   NE4 9DX     6
10  NE4 9EA     4

DataFrame 2: sa_gas_pcd_2018 指定列子集

POSTCODE    Number of meters
628318  NE4 9UP     41
628315  NE4 9UJ     36
628317  NE4 9UN     32
628199  NE4 9DY     29
628201  NE4 9EE     28
628316  NE4 9UL     28
628205  NE4 9EN     26
628200  NE4 9ED     20
628198  NE4 9DX     19
628204  NE4 9EL     17

筛选要求

需从sa_gas_pcd_2018子集中筛选满足以下条件的行:

  1. POSTCODE与studyarea_pcdn中的POSTCODE完全匹配
  2. 该行Number of meters与studyarea_pcdn对应POSTCODE的数值差值在±2范围内

预期结果

POSTCODE    Number of meters
628318  NE4 9UP     41
628317  NE4 9UN     32
628316  NE4 9UL     28
628205  NE4 9EN     26
628200  NE4 9ED     20
628204  NE4 9EL     17

解决思路与代码实现

方法1:合并DataFrame后筛选

通过内连接自动过滤不匹配的POSTCODE,再计算差值筛选:

# 重命名参考表的meter列,避免合并冲突
study_ref = studyarea_pcdn.rename(columns={'Number of meters': 'meter_ref'})
# 保留原数据集的索引,方便后续恢复
sa_subset = sa_gas_pcd_2018[['POSTCODE', 'Number of meters']].reset_index(names='original_idx')

# 内连接,只保留POSTCODE匹配的行
merged = sa_subset.merge(study_ref, on='POSTCODE', how='inner')
# 筛选差值在±2范围内的行
filtered = merged[abs(merged['Number of meters'] - merged['meter_ref']) <= 2]
# 恢复原索引并保留目标列
result = filtered.set_index('original_idx')[['POSTCODE', 'Number of meters']]
print(result)

方法2:用字典映射匹配参考值

先构建POSTCODE到参考meter值的映射,再逐行匹配筛选:

# 创建POSTCODE与参考meter值的字典映射
meter_map = studyarea_pcdn.set_index('POSTCODE')['Number of meters'].to_dict()
sa_subset = sa_gas_pcd_2018[['POSTCODE', 'Number of meters']]

# 添加参考值列,自动过滤不匹配的POSTCODE(对应值为NaN)
sa_subset['meter_ref'] = sa_subset['POSTCODE'].map(meter_map)
# 筛选条件:参考值存在且差值符合要求
filtered = sa_subset.dropna(subset=['meter_ref'])[abs(sa_subset['Number of meters'] - sa_subset['meter_ref']) <= 2]
# 移除参考列得到最终结果
result = filtered.drop(columns=['meter_ref'])
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:35:16