python - 在python中计算给定距离的网格值

标签 python pandas dataframe

我有一个大尺寸的单元格网格。每个单元格都有一个 ID ( p1 )、单元格值 ( p3 ) 和实际测量中的坐标 ( XY )。这是前 10 行/单元格的样子

      p1     p2          p3     X  Y
0      0     0.0         0.0    0  0
1      1     0.0         0.0  100  0
2      2     0.0        12.0  200  0
3      3     0.0         0.0  300  0
4      4     0.0        70.0  400  0
5      5     0.0        40.0  500  0
6      6     0.0        20.0  600  0
7      7     0.0         0.0  700  0
8      8     0.0         0.0  800  0
9      9     0.0         0.0  900  0

i 中单元格 p1 的相邻单元格可以确定为 ( i-500+1 , i-500-1 , i-1 , i+1 , i+500+1 , i+500-1 )。 例如: p1 为 5,其邻居为 - 4,6,504,505,506。 (这些是上表中行的 ID - p1 )。

我正在尝试的是: 对于 i 中选定的值/行 p1 ,我想知道距 i 选定距离内的所有邻居,并对它们所有的 p3 值求和。

我尝试应用此解决方案( link ),但我不知道如何合并距离参数。可以使用 df.iloc 获取单元格值,但在此之前的步骤对我来说有点棘手。

你能给我一些建议吗?

编辑: 使用 Thomas 的解决方案并将 df 称为 CO :

      p3
0     45
1    580
2  12000
3  12531
4  22456

我想添加另一列并使用 p3 列中的值

CO['new'] = format(sum_neighbors(data, CO['p3']))

但是这不起作用。如果我添加一个数字而不是对行 CO['p3'] 的引用,它就会像魅力一样工作。但是如何在 format 函数中自动使用 p3 列中的值?

已解决: 它适用于:

CO['new'] = CO.apply(lambda row: sum_neighbors(data, row.p3), axis=1)

最佳答案

解决方案:

import numpy as np
import pandas

# Generating toy data
N = 10
data = pandas.DataFrame({'p3': np.random.randn(N)})
print(data)

# Finding neighbours
get_candidates = lambda i: [i-500+1, i-500-1, i-1, i+1, i+500+1, i+500-1]
filter = lambda neighbors, N: [n for n in neighbors if 0<=n<N]
get_neighbors = lambda i, N: filter(get_candidates(i), N)

print("Neighbors of 5: {}".format(get_neighbors(5, len(data))))

# Summing p3 on neighbors
def sum_neighbors(data, i, col='p3'):
  return data.iloc[get_neighbors(i, len(data))][col].sum()

print("p3 sum on neighbors of 5: {}".format(sum_neighbors(data, 5)))

输出:

         p3
0 -1.106541
1 -0.760620
2  1.282252
3  0.204436
4 -1.147042
5  1.363007
6 -0.030772
7 -0.461756
8 -1.110459
9 -0.491368

Neighbors of 5: [4, 6]

p3 sum on neighbors of 5: -1.1778133703169344

注释:

  • 我假设 p1range(N),这似乎是暗示的(所以我们根本不需要它)。
  • 鉴于OP定义的i的邻居列表,我不认为5055的邻居。

关于python - 在python中计算给定距离的网格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873547/

相关文章:

python - 如何在存储在列表中的连续字典中添加元素

python - SQLAlchemy 自动映射数据并覆盖某些列

Python - 并行运行多个获取请求并在第一次响应时停止

python - Pandas pivot_table 日期

python-3.x - 根据第三列的条件将列中的时间添加到日期列

python - 如何设置 Pandas 索引的频率?

python - 通过队列设置 Celery 时限

python - 数据帧 : each column in different plot in subplot

python-2.7 - 从 Pandas 的另一列中填充一列的缺失值

python - 如何在给定整数索引的情况下检索 pandas 数据帧行的标签索引?