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

如何通过循环为DataFrame添加多值并重复行

实现方案

首先把分散的姓名-物品列表整理成字典,方便通过姓名快速索引:

name_picks = {
    'Jason': ['chair', 'table', 'pencil'],
    'Miguel': ['smartphone', 'cake'],
    'Johana': ['clock', 'paper']
}

假设你的原始DataFrame定义如下(如果是从数据库读取的,直接用读取后的对象即可):

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Jason', 'Miguel', 'Johana']
})

高效循环实现(适合大数据量)

用列表预先存储所有结果行,最后一次性转为DataFrame,避免循环中频繁修改原DataFrame带来的性能损耗:

# 初始化空列表存储结果
result_rows = []

# 用itertuples遍历行,比iterrows性能更优
for row in df.itertuples(index=False):
    current_name = row.name
    # 获取当前姓名对应的物品列表,不存在则返回空列表
    picks = name_picks.get(current_name, [])
    # 遍历物品列表,生成新行
    for pick in picks:
        result_rows.append({
            'id': row.id,
            'name': current_name,
            'picks': pick
        })

# 转换为最终DataFrame
final_df = pd.DataFrame(result_rows)

输出结果

运行后final_df的结构与你要求的目标完全一致:

idnamepicks
1Jasonchair
1Jasontable
1Jasonpencil
2Miguelsmartphone
2Miguelcake
3Johanaclock
3Johanapaper

补充说明

如果不限制必须用循环,Pandas内置的explode方法会更简洁高效:

# 先将物品列表映射到原DataFrame
df['picks'] = df['name'].map(name_picks)
# 展开列表为多行
final_df = df.explode('picks').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:06:42