首页 > 解决方案 > 反转熊猫数据框并连接结果

问题描述

我有一个两列熊猫数据框

source |  target
----------------
1         3
2         4
2         1

这表示图的边缘列表。就目前而言,该图是有向的。我想将其转换为无向图,因此我需要“互补”边,从而获得:

source |  target
----------------
1         3
3         1
2         4
4         2
2         1
1         2

有什么方法可以直接在 Pandas 中执行此操作,而无需使用图形库,例如 networkx?

标签: pythonpandasdataframe

解决方案


有什么方法可以直接在 Pandas 中执行此操作,而不使用图形库,例如 networkx

我们可以使用反转df df.iloc,然后使用追加df.append

out = df.append(pd.DataFrame(df.iloc[:,::-1].to_numpy(),index=df.index
      ,columns=df.columns)).sort_index().reset_index(drop=True)

或使用np.flip

(df.append(pd.DataFrame(np.flip(df.to_numpy(),axis=1),
 index=df.index,columns=df.columns)).sort_index().reset_index(drop=True))

print(out)

   source  target
0       1       3
1       3       1
2       2       4
3       4       2
4       2       1
5       1       2

注意:如果有更多列,您可以将数据框的子集作为sub_df = df[['source','target']]并替换dfsub_dfi 代码。

@ShubhamSharma 提出的另一个想法使用set_axis它动态重命名列:

(df.append(df.iloc[:, ::-1].set_axis(df.columns, 1,inplace=False))
   .sort_index().reset_index(drop=True))

推荐阅读