根据共享节点在 Pandas 中查找邻居
Finding neighbours in Pandas based on shared nodes
我有一个包含 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_IDs可以排序,但通常是随机的。
我已经通过使用 scipy 中的 KDTree 设法通过元素宽度的距离获得元素的邻域,但我没有获得任何位置信息(S、N、E、W)。
有人知道如何使用 pandas 或 numpy 来完成吗?
我想避免循环,因为元素表可能很长....
谢谢
使用 pandas 您可以执行以下操作:
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 之间的关系。
您必须对其他象限执行相同的操作。
我有一个包含 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_IDs可以排序,但通常是随机的。 我已经通过使用 scipy 中的 KDTree 设法通过元素宽度的距离获得元素的邻域,但我没有获得任何位置信息(S、N、E、W)。
有人知道如何使用 pandas 或 numpy 来完成吗? 我想避免循环,因为元素表可能很长....
谢谢
使用 pandas 您可以执行以下操作:
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 之间的关系。
您必须对其他象限执行相同的操作。