如何在Pandas中实现列值重复并正确拆分Connections列内容
解决DataFrame中列值重复与Connections列正确拆分的问题
嘿,我明白你遇到的问题了——用list()处理字符串的时候,它会把每个字符都拆出来,而不是按你想要的逗号分隔,对吧?咱们来一步步解决这个问题。
首先,先回顾下你的输入数据:
import pandas as pd dfno = pd.DataFrame({'Nodes':['A','B','C'], 'Connections': ['Za,Eb', 'Qa,Rb', 'La,Mb']})
问题根源
你之前用list(str(row['Connections'])),比如处理"Za,Eb"时,会把它拆成['Z','a',',','E','b'],这显然不是你要的。正确的拆分方式应该是用字符串的split(',')方法,按逗号分割成子字符串列表。
推荐方法:用Pandas原生函数高效实现
Pandas有专门的函数来处理这种“把列表拆成多行”的需求,代码简洁又高效,完全不用手动循环:
# 第一步:把Connections列按逗号拆分为列表 dfno['Connections'] = dfno['Connections'].str.split(',') # 第二步:将列表展开为多行,自动重复对应的Nodes值 result_df = dfno.explode('Connections')
运行后你会得到想要的结果:
Nodes Connections 0 A Za 0 A Eb 1 B Qa 1 B Rb 2 C La 2 C Mb
这个方法的优势在于:str.split(',')会精准地把每个Connections字符串拆成包含两个元素的列表(比如"Za,Eb"变成["Za", "Eb"]),然后explode函数会自动把列表中的每个元素拆成单独的行,同时保持Nodes列的值和原行一致,完美匹配你的需求。
如果你坚持要用循环实现(不推荐大数据量)
如果因为某些原因你需要用循环的方式,那只需要把list()换成split(','),然后遍历拆分后的列表,把每一组节点和连接存入新列表,最后转成DataFrame:
result_rows = [] for _, row in dfno.iterrows(): node = row['Nodes'] # 用split(',')替代list(),按逗号拆分 connections = row['Connections'].split(',') for conn in connections: result_rows.append({'Nodes': node, 'Connections': conn}) result_df = pd.DataFrame(result_rows)
不过要注意,iterrows()在处理大型DataFrame时效率很低,所以优先推荐第一种原生方法哦。
内容的提问来源于stack exchange,提问作者SoKu
相关产品推荐
相关产品推荐

