如何在Pandas DataFrame中拆分列并将原行复制为新行
解决Pandas DataFrame拆分列值并生成新行的问题
方法一:使用str.split + explode(推荐)
这是最简洁高效的实现方式,两步即可完成需求:
import pandas as pd # 模拟你的输入数据 data = { 'Order#': ['123', '456,789', '321', '121,651'], 'Price': ['$20', '$50', '$45', '$76'], 'Quantity': [5, 7, 3, 9] } df = pd.DataFrame(data) # 1. 将Order#列的逗号分隔值拆分为列表格式 df['Order#'] = df['Order#'].str.split(',') # 2. 展开列表中的每个元素为单独行,自动复制其他列的对应值 df = df.explode('Order#').reset_index(drop=True) print(df)
输出结果:
Order# Price Quantity 0 123 $20 5 1 456 $50 7 2 789 $50 7 3 321 $45 3 4 121 $76 9 5 651 $76 9
方法二:基于你尝试的expand=True实现
如果想延续你之前的思路,可通过以下步骤完成:
import pandas as pd data = { 'Order#': ['123', '456,789', '321', '121,651'], 'Price': ['$20', '$50', '$45', '$76'], 'Quantity': [5, 7, 3, 9] } df = pd.DataFrame(data) # 1. 拆分Order#列为多列,expand=True会将拆分结果转为多列格式 split_cols = df['Order#'].str.split(',', expand=True) # 2. 将拆分后的多列转为长格式,过滤空值并保留原始索引 split_long = split_cols.melt(var_name='temp', value_name='Order#').dropna(subset=['Order#']) # 3. 合并原始数据的其他列与拆分后的Order#列,按索引匹配 result = pd.merge(df.drop('Order#', axis=1), split_long[['Order#']], left_index=True, right_index=True) # 4. 重置索引避免混乱 result = result.reset_index(drop=True) print(result)
核心逻辑说明
str.split(','):把单个逗号分隔的字符串拆分为列表,为后续行展开做准备explode():Pandas专门用于将列表/数组类型列展开为多行的方法,自动复制当前行的其他列值到新行melt():将宽格式的拆分结果转为长格式,适配expand=True生成的多列数据
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

