Python遍历Pandas DataFrame列匹配值时仅重复返回首个索引如何解决
问题原因
- 出错核心是Python内置列表的
index()方法特性:该方法只会返回列表中第一个匹配目标值的元素下标,你每次匹配到值为1的元素时调用该方法,永远返回第一个1的下标0,最终才会输出[0,0,0]的错误结果。
解决方案
方案1:修正for循环写法
遍历列的时候同时获取索引和对应值,不需要再调用index()方法查询下标:
import pandas as pd d = {'a': [0.1, 0.2,0.3,0.4,0.5,0.6], 'b': [0.6, 0.8,0.3,0.4,0.1,0.1], 'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]} df = pd.DataFrame(data=d) klist=[] for idx, val in enumerate(df.d): if val == 1: klist.append(idx) print(klist)
运行输出为[0, 3, 5],符合预期。
方案2:使用Pandas向量化操作(更推荐)
无需手动写循环,直接通过Pandas布尔索引筛选目标行后取索引,代码更简洁、大数据量下性能更高:
klist = df[df['d'] == 1].index.tolist() print(klist)
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

