如何拆分DataFrame中多值Name列并复制对应Age行?
拆分DataFrame中多值列并重复对应行的解决方案
样本数据
import pandas as pd df = pd.DataFrame({'Name':['A,B','C','D','E,F,G'], 'Age':[4,6,8,9]})
预期输出
pd.DataFrame({'Name':['A','B','C','D','E','F','G'], 'Age':[4,4,6,8,9,9,9]})
你已经能通过df['Name'].apply(lambda x : x.split(','))拆分Name列为列表,下面给你两种实用方法,实现将列表元素拆成单独行并重复对应Age值:
方法一:用explode()(推荐,Pandas 0.25及以上版本可用)
这是最简洁的处理方式,直接展开列表列并匹配对应行数据:
# 先将Name列拆分为列表格式 df['Name'] = df['Name'].str.split(',') # 展开列表为多行,自动重复对应Age值 result = df.explode('Name').reset_index(drop=True) print(result)
explode会自动把每个列表元素拆成独立行,其他列的数值保持和原行一致,直接得到目标结果。
方法二:兼容旧版Pandas的写法
如果你的Pandas版本较低,可使用这种方式:
# 拆分Name列成多列,再转为多行结构 split_names = df['Name'].str.split(',', expand=True).stack() # 清理冗余索引并重新命名列 split_names = split_names.reset_index(level=1, drop=True).rename('Name') # 和原表的Age列合并,生成最终结果 result = df[['Age']].join(split_names).reset_index(drop=True) print(result)
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

