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

使用iterrows为Pandas DataFrame赋值无效问题求助

问题原因与解决方案

为什么你的循环没生效?

用iterrows()遍历DataFrame时,每次迭代返回的row是原数据行的副本,不是对原DataFrame的直接引用。你修改row['col4']只是改动了这个临时副本,原DataFrame的col4不会受到影响。

推荐的解决方案(优先用向量化操作)

Pandas的设计初衷是用向量化操作替代循环,效率更高且代码更简洁,这里有两种最优写法:

方法1:通过loc按条件批量赋值

直接定位符合条件的行和列,批量完成赋值:

df.loc[df['col2'] == 1, 'col4'] = df['col3'] * 3
df.loc[df['col2'] == 2, 'col4'] = df['col3'] * 2
df.loc[df['col2'] == 3, 'col4'] = df['col3'] * 1

方法2:用映射关系简化逻辑

先定义col2对应的乘数映射,再通过map匹配乘数后与col3相乘:

multiplier_map = {1: 3, 2: 2, 3: 1}
df['col4'] = df['col2'].map(multiplier_map) * df['col3']

这种写法扩展性更强,后续如果新增col2的取值,只需要修改映射字典即可。

如果一定要用循环(不推荐大数据场景)

如果坚持用循环实现,需要通过索引i定位原DataFrame的行进行修改,同时把多个if改成elif减少冗余判断:

for i, row in df.iterrows():
    if row['col2'] == 1:
        df.loc[i, 'col4'] = row['col3'] * 3
    elif row['col2'] == 2:
        df.loc[i, 'col4'] = row['col3'] * 2
    elif row['col2'] == 3:
        df.loc[i, 'col4'] = row['col3'] * 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:56:14