Pandas:如何为多行中所有匹配的值创建主链接记录

  • 本文关键字:创建 记录 链接 Pandas python pandas
  • 更新时间 :
  • 英文 :


假设我有一个数据帧,如下所示,在2列中有值对。

A       B
182269  182270  
654372  654374
619300  619301
654373  654374

我想添加另一列,该列的行值表示同一行对中的所有匹配值,以及由这对值匹配的其他行中的所有值。

以下是预期结果:

A       B       C
182269  182270  182269, 182270
654372  654374  654372, 654373, 654374
619300  619301  619300, 619301
654373  654374  654372, 654373, 654374

你能给我建议吗?提前感谢!

让我们做networkx,注意我没有将set转换为字符串,如果你想将其转换为join

import networkx as nx
G=nx.from_pandas_edgelist(df, 'A', 'B')
l=list(nx.connected_components(G))
df['New']=[ y  for y in l  for x in df.A if x in y]
df
A       B                       New
0  182269  182270          {182269, 182270}
1  654372  654374  {654372, 654373, 654374}
2  654373  654374  {654372, 654373, 654374}
3  619300  619301          {619300, 619301}

您可以使用np.arange,其中可以指定startstopstep。它将生成一个具有增量值的数组:

In [420]: df                                                                                                                                                                                                
Out[420]: 
A       B  
0  182269  182270  
1  654372  654374  
2  654373  654374  
3  619300  619301  
In [418]: df['C'] = [np.arange(x.A, x.B+1, 1) for x in df.itertuples()] 
In [420]: df                                                                                                                                                                                                
Out[420]: 
A       B                         C
0  182269  182270          [182269, 182270]
1  654372  654374  [654372, 654373, 654374]
2  654373  654374          [654373, 654374]
3  619300  619301          [619300, 619301]

最新更新