You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于列表列长度复制并更新DataFrame行的技术方案问询

Pandas批量处理DataFrame行复制与列更新方案

需求说明

处理Pandas DataFrame时需遵循以下规则:

  • 依据每行Column B列的列表长度决定行复制次数:列表长度为n时,额外复制n-1行(如3个元素复制2次,1个元素不复制)
  • 复制生成的新行需将Column c更新为列表对应位置的元素(原行保留列表第一个元素,新行依次取列表第2、3...个元素)

原始数据

Column AColumn BColumn c
xxxx xxx xx['a', 'b', 'c']a
zzz zz zzzz['d', 'e']d
aa aaa aaa a['f']f

期望输出

Column AColumn BColumn c
xxxx xxx xx['a', 'b', 'c']a
zzz zz zzzz['d', 'e']d
aa aaa aaa a['f']f
xxxx xxx xx['a', 'b', 'c']b
xxxx xxx xx['a', 'b', 'c']c
zzz zz zzzz['d', 'e']e

解决方案

方法1:高效内置函数实现(推荐,适配大数据集)

利用Pandas的explode函数完成批量处理,避免逐行循环,性能更优:

import pandas as pd

# 构造原始DataFrame(实际使用时替换为你的数据读取逻辑)
data = {
    'Column A': ['xxxx xxx xx', 'zzz zz zzzz', 'aa aaa aaa a'],
    'Column B': [['a', 'b', 'c'], ['d', 'e'], ['f']],
    'Column c': ['a', 'd', 'f']
}
df = pd.DataFrame(data)

# 生成需要新增的行:提取列表中除第一个元素外的剩余元素并展开
df['_temp_items'] = df['Column B'].apply(lambda x: x[1:])
expanded_rows = df.explode('_temp_items').dropna(subset=['_temp_items'])

# 更新新增行的Column c字段
expanded_rows['Column c'] = expanded_rows['_temp_items']

# 合并原始数据与新增行,清理临时列并重置索引
result_df = pd.concat([df, expanded_rows.drop('_temp_items', axis=1)], ignore_index=True)

# 查看结果
print(result_df)

方法2:逐行循环实现(适合小数据集或调试)

如果需要更直观的逻辑展示,可使用逐行循环的方式:

import pandas as pd

# 构造原始DataFrame
data = {
    'Column A': ['xxxx xxx xx', 'zzz zz zzzz', 'aa aaa aaa a'],
    'Column B': [['a', 'b', 'c'], ['d', 'e'], ['f']],
    'Column c': ['a', 'd', 'f']
}
df = pd.DataFrame(data)

new_rows = []
for _, row in df.iterrows():
    # 遍历列表中除第一个元素外的剩余元素,生成新行
    for item in row['Column B'][1:]:
        new_row = row.copy()
        new_row['Column c'] = item
        new_rows.append(new_row)

# 合并数据
result_df = pd.concat([df, pd.DataFrame(new_rows)], ignore_index=True)
print(result_df)

内容的提问来源于stack exchange,提问作者user22391597

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:58:41