Python 跨多个列将匹配对分组在一起
谢谢你的阅读 我有一个数据框,看起来像这样:Python 跨多个列将匹配对分组在一起,python,pandas,dataframe,cluster-computing,Python,Pandas,Dataframe,Cluster Computing,谢谢你的阅读 我有一个数据框,看起来像这样: Col_A Col_B Col_C Col_D Col_E 1 2 null null null 1 null 3 null null null 2 3 null null null 2 null 4 null 1 null null null 5 每一行由两个ID之间的匹配
Col_A Col_B Col_C Col_D Col_E
1 2 null null null
1 null 3 null null
null 2 3 null null
null 2 null 4 null
1 null null null 5
每一行由两个ID之间的匹配组成(例如,第一行中a列的ID1匹配到B列的ID2)
在上面的示例中,所有5个ID都已连接(1连接到2、2到3、2到4、1到5)。因此,我想创建一个新列,将所有这些行聚集在一起,以便轻松访问每组匹配对:
Col_A Col_B Col_C Col_D Col_E Group ID
1 2 null null null 1
1 null 3 null null 1
null 2 3 null null 1
null 2 null 4 null 1
1 null null null 5 1
我还没有找到一个类似的问题,但如果这是重复的,我道歉。非常感谢您的建议。正如@YOBEN_S和@QuangHoang所建议的,您可以使用networkx库和类似的工具 鉴于df
df = pd.DataFrame({'Col_A': {0: 1.0, 1: 1.0, 2: np.nan, 3: np.nan, 4: 1.0, 5: np.nan},
'Col_B': {0: 2.0, 1: np.nan, 2: 2.0, 3: 2.0, 4: np.nan, 5: np.nan},
'Col_C': {0: np.nan, 1: 3.0, 2: 3.0, 3: np.nan, 4: np.nan, 5: np.nan},
'Col_D': {0: np.nan, 1: np.nan, 2: np.nan, 3: 4.0, 4: np.nan, 5: np.nan},
'Col_E': {0: np.nan, 1: np.nan, 2: np.nan, 3: np.nan, 4: 5.0, 5: np.nan},
'Col_F': {0: np.nan, 1: np.nan, 2: np.nan, 3: np.nan, 4: np.nan, 5: 6.0},
'Col_G': {0: np.nan, 1: np.nan, 2: np.nan, 3: np.nan, 4: np.nan, 5: 7.0}})
| | Col_A | Col_B | Col_C | Col_D | Col_E | Col_F | Col_G |
|---:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|
| 0 | 1 | 2 | nan | nan | nan | nan | nan |
| 1 | 1 | nan | 3 | nan | nan | nan | nan |
| 2 | nan | 2 | 3 | nan | nan | nan | nan |
| 3 | nan | 2 | nan | 4 | nan | nan | nan |
| 4 | 1 | nan | nan | nan | 5 | nan | nan |
| 5 | nan | nan | nan | nan | nan | 6 | 7 |
使用
输出:
| | Col_A | Col_B | Col_C | Col_D | Col_E | Col_F | Col_G | groupid |
|---:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|----------:|
| 0 | 1 | 2 | nan | nan | nan | nan | nan | 1 |
| 1 | 1 | nan | 3 | nan | nan | nan | nan | 1 |
| 2 | nan | 2 | 3 | nan | nan | nan | nan | 1 |
| 3 | nan | 2 | nan | 4 | nan | nan | nan | 1 |
| 4 | 1 | nan | nan | nan | 5 | nan | nan | 1 |
| 5 | nan | nan | nan | nan | nan | 6 | 7 | 2 |
看起来像是网络问题~ checkout
networkx
package。干杯,这真的很有用-除了使用to\u numpy(),还有其他选择吗?是的,对于df.to\u numpy()
,你可以使用df.to\u numpy()
和旧版本的pandas。嗨,有没有其他选择来使用networkx/图论包(loop?)。这在较大的数据集(数十万行)上运行缓慢。Thanks@Joseph0210人力资源管理。。我不知道还有另一个简单的解决办法。我相信你可以编写一个自定义函数来做同样的事情,但我不确定它会更快。
| | Col_A | Col_B | Col_C | Col_D | Col_E | Col_F | Col_G | groupid |
|---:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|----------:|
| 0 | 1 | 2 | nan | nan | nan | nan | nan | 1 |
| 1 | 1 | nan | 3 | nan | nan | nan | nan | 1 |
| 2 | nan | 2 | 3 | nan | nan | nan | nan | 1 |
| 3 | nan | 2 | nan | 4 | nan | nan | nan | 1 |
| 4 | 1 | nan | nan | nan | 5 | nan | nan | 1 |
| 5 | nan | nan | nan | nan | nan | 6 | 7 | 2 |