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

如何在DataFrame中根据x、y值查找相邻值?

如何在DataFrame中根据x、y值查找相邻值?

我明白你现在的需求啦——给带x、y坐标的DataFrame每个位置找出相邻的value,最多保留3个,而且之前用循环的方法不仅没覆盖所有相邻情况,大数据集还跑起来特别慢对吧?我来给你分享一个高效的实现方式~

首先先明确你的邻接逻辑:每个位置的相邻是上下左右四个方向的有效坐标(超出x/y范围的坐标不算),然后把这些坐标对应的value取出来,最多保留3个,不足的补NA,和你给出的示例结果完全匹配。

实现步骤

1. 先准备示例数据(和你给出的一致)

import pandas as pd

data = {
    'x': [0,1,2,3,0,1,2,3],
    'y': [0,0,0,0,1,1,1,1],
    'value': ['red','pink','green','blue','yellow','orange','blue','purple']
}
df = pd.DataFrame(data)

2. 构建坐标到value的映射字典

用字典来存储(x,y)坐标对应的value,这样查找相邻值的速度会非常快,比反复查询DataFrame高效得多:

coord_to_value = df.set_index(['x','y'])['value'].to_dict()

3. 定义获取相邻值的函数

这个函数会根据输入的x、y,生成四个方向的相邻坐标,过滤掉不存在的坐标后取出对应的value,最后补全到3个元素(不足的用NA填充):

def get_adjacent_values(x, y):
    # 定义四个方向的相邻坐标,顺序可以根据你的需求调整
    adjacent_coords = [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]
    # 过滤掉不在原始数据中的坐标,取出对应的value
    adjacent_vals = [coord_to_value[coord] for coord in adjacent_coords if coord in coord_to_value]
    # 最多保留3个值,不足的补NA
    return adjacent_vals + [pd.NA]*(3 - len(adjacent_vals))

4. 应用函数生成相邻值列

用apply把函数应用到每一行,直接生成三个相邻值列:

df[['adjacent_1', 'adjacent_2', 'adjacent_3']] = df.apply(
    lambda row: get_adjacent_values(row['x'], row['y']),
    axis=1,
    result_type='expand'
)

最终结果

运行后打印df,就会得到你想要的输出:

x  y   value adjacent_1 adjacent_2 adjacent_3
0  0  0     red        pink      yellow       <NA>
1  1  0    pink         red       green      orange
2  2  0   green        pink        blue        blue
3  3  0    blue      purple       green       <NA>
4  0  1  yellow         red      orange       <NA>
5  1  1  orange      yellow        pink        blue
6  2  1    blue      orange       green      purple
7  3  1  purple        blue        blue       <NA>

为什么这个方法比你原来的循环好?

  • 覆盖所有相邻情况:原来的循环只处理了x-1的情况,完全没考虑x+1、y+1、y-1这些方向的相邻值,结果不全。
  • 效率大幅提升:用字典查找+apply的方式,比你原来循环修改iloc的方式高效太多,大数据集下差异会非常明显(循环赋值在pandas里是非常不推荐的操作)。
  • 灵活性高:如果需要调整相邻坐标的优先级(比如先看上下再看左右),只要修改adjacent_coords里的坐标顺序就行。

备注:内容来源于stack exchange,提问作者SMar3552

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:12:33