如何迭代Pandas DataFrame值生成符合捐赠条件的人员ID列表
问题原因
iterrows()遍历逻辑错误:for 行索引, 当前行对象 in DataFrame.iterrows()是正确用法,你在循环内部重新把a赋值为val1['controln'](整个ID列的Series对象),导致追加到列表里的是全量ID而非当前行符合条件的单个ID- 多余嵌套循环:每一行只有一个
amount_donated值,不需要额外遍历c,直接取当前行的对应字段判断即可 - 边界逻辑可按需调整:如果需求是「超过1/5美元」即严格大于,可把判断条件里的
>=改为>
修改后的循环写法
above5 = [] above1 = [] for _, row in val1.iterrows(): # 取当前行的对应字段值 user_id = row['controln'] donated = row['donated'] amount = row['amount_donated'] if amount >= 5: above5.append(user_id) # 超过5的自然也超过1,如果需要两个列表都存该ID就保留下面这行,不需要可删除 above1.append(user_id) elif amount >= 1: above1.append(user_id) else: print('No match') print('Done')
更高效的Pandas向量化写法(无需手动写循环,性能远高于遍历)
# 捐款>=1的人员ID列表 above1 = val1[val1['amount_donated'] >= 1]['controln'].tolist() # 捐款>=5的人员ID列表 above5 = val1[val1['amount_donated'] >= 5]['controln'].tolist()
内容的提问来源于stack exchange,提问作者Antie
相关产品推荐
相关产品推荐

