如何将列表元素依次循环分配给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
相关产品推荐
相关产品推荐

