假设我有一个数据帧,如下所示,在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,其中可以指定start
、stop
和step
。它将生成一个具有增量值的数组:
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]