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

如何将列表元素依次循环分配给Pandas DataFrame每行?iterrows尝试失败

Pandas循环分配列表元素到DataFrame行的解决方案

问题说明

你需要将一个列表的元素循环分配给DataFrame的每一行(例如第1行用列表第1个元素,第2行用第2个,第6行回到第1个,以此类推),但使用嵌套iterrows循环的代码导致所有行都被分配了列表最后一个元素。

原代码问题分析

你的代码逻辑存在错误:

for index, row in df.iterrows():
    for doctor in l_doctor:
        df.loc[index,'Assignee'] = doctor

对于每个行索引index,你会遍历完所有医生,每次赋值都会覆盖同一行的内容,最终该行只会保留最后一次循环的医生名称,所以所有行都变成了列表的最后一个元素。

正确实现方式

方式1:利用索引取模映射(高效简洁)

通过DataFrame的索引对列表长度取模,直接计算每行对应的列表元素索引,无需循环遍历行:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Name': ['First', 'Second', 'Third', 'Fourth', 'Fifth'],
    'Gender': ['Male', 'Female', 'Male', 'Male', 'Male']
})
list_doctor = ['andrea','anup']

# 计算每行对应的医生索引
doctor_idx = df.index % len(list_doctor)
# 映射得到医生名称并添加为新列
df['Doctor'] = [list_doctor[i] for i in doctor_idx]

执行后得到期望结果:

Name  Gender  Doctor
0   First    Male  andrea
1  Second  Female    anup
2   Third    Male  andrea
3  Fourth    Male    anup
4   Fifth    Male  andrea

方式2:使用itertools.cycle生成循环迭代器

借助itertools.cycle可以生成无限循环列表元素的迭代器,取前len(df)个元素直接赋值:

from itertools import cycle
import pandas as pd

df = pd.DataFrame({
    'Name': ['First', 'Second', 'Third', 'Fourth', 'Fifth'],
    'Gender': ['Male', 'Female', 'Male', 'Male', 'Male']
})
list_doctor = ['andrea','anup']

df['Doctor'] = list(cycle(list_doctor))[:len(df)]

这种方式代码更简洁,适合快速实现循环分配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:31:09