基于共享节点在熊猫中查找邻居



我有一个包含 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(进行比较会得到一个相邻元素756755Neighbor_North,反之亦然。将(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 | 纳恩 |803|709|... |802 |1458年 |1459年 |1505 |1504 | 801 | 803 |849|755|... ...

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

有人知道熊猫或麻瓜怎么做吗? 我想逃避循环,因为元素表可能很长......

谢谢

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

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 之间的关系。

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

最新更新