Pandas逐行遍历问题:判断size列值为2的条件不触发如何修正
问题根因
df['size'] == 2返回的是布尔类型的Series序列(示例数据下结果为[False, True, False]),不是单个布尔值,因此(df['size'] == 2) is True的判断永远返回False,自然无法进入第一个条件分支。- 原有代码没有逐行遍历逻辑,直接对整列做判断,不符合逐行处理生成新列的需求。
修正代码
如果你要逐行判断,每行size等于2时对应行的col1取val1的值,其余行可按需求赋值(示例中其余行设为空值,你可以自行修改),修正后的代码如下:
# 逐行遍历DataFrame for index, row in df.iterrows(): if row['size'] == 2: df.loc[index, 'col1'] = row['val1'] print("1") else: # 其余行的col1可按你的需求赋值,这里示例设为空 df.loc[index, 'col1'] = None pass
如果你原本的逻辑不是逐行,而是只要整个size列存在等于2的值,就把整个col1列都设为val1,那仅修改原有代码的条件判断即可:
if (df['size'] == 2).any(): df['col1'] = df['val1'] print("1") else: pass
验证结果
用你提供的示例数据运行修正后的逐行处理代码,得到的df结果如下:
| id | val1 | size | col1 |
|---|---|---|---|
| x1 | 100 | 1 | NaN |
| x2 | 200 | 2 | 200 |
| x3 | 300 | 1 | NaN |
内容的提问来源于stack exchange,提问作者tamo007
相关产品推荐
相关产品推荐

