如何将DataFrame索引作为条件赋值?代码条件判断失效求助
问题分析与解决方案
问题根源
你的代码中,每次遍历DataFrame行时,都会直接给period_{i}整列赋值。比如第一次遍历到Item 1时,整列被设为10,但紧接着遍历到Item 2时,整列又被覆盖为100,直到最后一行Item 4,整列最终值是100,导致你的索引条件判断完全失效。
推荐解决方案(Pandas向量化操作,高效简洁)
Pandas不推荐嵌套循环操作,优先用向量化方法实现:
import pandas as pd # 初始化带指定索引的DataFrame df1 = pd.DataFrame(index=['Item 1', 'Item 2', 'Item 3', 'Item 4']) # 生成所有要创建的period列名 period_columns = [f'period_{i}' for i in range(1, 55)] # 先给所有列赋值100 df1[period_columns] = 100 # 单独给Item 1的所有period列赋值10 df1.loc['Item 1', period_columns] = 10
若坚持使用循环的修正写法
如果一定要用循环实现,需要避免整列覆盖,只修改对应行的单元格:
import pandas as pd df1 = pd.DataFrame(index=['Item 1', 'Item 2', 'Item 3', 'Item 4']) multipliers = range(1, 55) for i in multipliers: # 先初始化列值为100 df1[f'period_{i}'] = 100 # 遍历行找到Item 1,修改对应单元格 for j, row in df1.iterrows(): if j == 'Item 1': df1.loc[j, f'period_{i}'] = 10 break # 找到目标行后直接跳出循环,提升效率
内容的提问来源于stack exchange,提问作者Sydney
相关产品推荐
相关产品推荐

