code: def connect_edges_pd(graph):
      
      edges = graph.dframe()
      edges.index.name = 'graph_edge_index'
      edges = edges.reset_index()
      nodes = graph.nodes.dframe()
      src, tgt = graph.kdims
      x, y, idx = graph.nodes.kdims[:3]
  
      df = pd.merge(edges, nodes, left_on=[src.name], right_on=[idx.name])
      df = df.rename(columns={x.name: 'src_x', y.name: 'src_y'})
  
      df = pd.merge(df, nodes, left_on=[tgt.name], right_on=[idx.name])
      df = df.rename(columns={x.name: 'dst_x', y.name: 'dst_y'})
      df = df.sort_values('graph_edge_index').drop(['graph_edge_index'], axis=1)
  
      edge_segments = []
      for i, edge in df.iterrows():
          start = edge['src_x'], edge['src_y']
          end = edge['dst_x'], edge['dst_y']
          edge_segments.append(np.array([start, end]))
      return edge_segments
docs: Given a Graph element containing abstract edges compute edge
      segments directly connecting the source and target nodes. This
      operation depends on pandas and is a lot faster than the pure
      NumPy equivalent.