根据共享节点在熊猫中寻找邻居

时间:2018-09-06 13:21:09

标签: python pandas numpy nearest-neighbor

我有一个包含FEM元素及其节点的数据框。
我需要从此数据中找到相邻元素以及它们各自的位置。
示例数据如下所示:

| El_ID | Node_SW | Node_NW | Node_NE | Node_SE |
|-------|---------|---------|---------|---------|
| 755   | 1412    | 1413    | 1459    | 1458    |
| 756   | 1413    | 1414    | 1460    | 1459    |
| 802   | 1458    | 1459    | 1505    | 1504    |

(Node_SW,Node_SE)(Node_NW,Node_NE)进行比较,会产生一个邻居元素 756 作为 Neighbor_North 755 ,反之亦然。比较(Node_NE,Node_SE)和(Node_NW,Node_SW)分别得出西方和东方邻居。

输出应如下所示

| El_ID | Node_SW | Node_NW | Node_NE | Node_SE | El_S | El_N |El_W|El_E|...
|-------|---------|---------|---------|---------|------|------|----|----|...
| 755   | 1412    | 1413    | 1459    | 1458    |  754 |  756 | 802| 708|...
| 756   | 1413    | 1414    | 1460    | 1459    |  755 |  NaN | 803| 709|...
| 802   | 1458    | 1459    | 1505    | 1504    |  801 |  803 | 849| 755|...
...

Element_ID可以排序,但是通常是随机的。 我已经通过使用scipy中的KDTree设法通过元素宽度的距离获得元素的邻域,但是我没有得到任何位置信息(S,N,E,W)。

任何人都知道如何用熊猫或numpy做到吗? 我想避开循环,因为元素表可能很长。...

谢谢

1 个答案:

答案 0 :(得分:0)

使用熊猫,您可以执行以下操作:

data = [[755   , 1412    , 1413    , 1459    , 1458],    
         [756   , 1413    , 1414    , 1460    , 1459] ,  
         [802  , 1458    , 1459    , 1505    , 1504]] 

df = pd.DataFrame(data, columns=['El_ID',  'Node_SW' , 'Node_NW' , 'Node_NE' , 'Node_SE'])

然后按照关系Node_SW-Node_NW,获取邻居

pd.merge(df, df, left_on= 'Node_SW', right_on='Node_NW')

输出为

    El_ID_x     Node_SW_x   Node_NW_x   Node_NE_x   Node_SE_x   El_ID_y     Node_SW_y   Node_NW_y   Node_NE_y   Node_SE_y
0   756     1413    1414    1460    1459    755     1412    1413    1459    1458

您将获得756和755之间的关系。

您必须对其他象限执行相同的操作。