Pandas:统计指定布尔列中任意列为True的行数
问题解决:统计布尔DataFrame中任意指定列为True的总行数
原代码的问题
你的循环代码存在索引错误:df_con.loc[col]是获取整列的数据,并非当前行的对应列值。这会导致你用整列布尔数组和True比较,得到的是另一个布尔数组,而非单个布尔值,进而引发错误或逻辑偏差。
修正后的循环写法
如果一定要用循环实现,把判断条件改成当前行的列值即可:
df_con = df[['Traffic_Signal', 'Crossing', 'Junction', 'Bump', 'Railway']] cols = ['Traffic_Signal', 'Crossing', 'Junction', 'Bump', 'Railway'] count = 0 for index, row in df_con.iterrows(): for col in cols: if row[col]: # 布尔值直接判断,无需写==True count += 1 break print(count)
更高效的Pandas向量化写法
iterrows在处理大数据集时效率极低,推荐用Pandas原生的向量化操作,一行代码就能完成统计:
target_cols = ['Traffic_Signal', 'Crossing', 'Junction', 'Bump', 'Railway'] # any(axis=1)判断每行是否至少有一个True,sum()统计True的数量 count = df[target_cols].any(axis=1).sum() print(count)
原理:df[target_cols].any(axis=1)会生成一个布尔Series,每行标记该行是否存在至少一个True;sum()会把True当作1、False当作0,直接求和得到符合条件的总行数。
内容的提问来源于stack exchange,提问作者RRB
相关产品推荐
相关产品推荐

