如何为布尔值DataFrame添加每行首个True值的列索引新列?
获取布尔值DataFrame每行首个True的列索引
不用手动遍历行和列,用pandas内置方法就能高效解决,还能避免遍历容易出现的索引错误或边界问题:
import pandas as pd # 假设你的布尔DataFrame名为df # 1. 获取每行第一个True对应的列索引,全False的行暂取第一个列名 first_true_col = df.idxmax(axis=1) # 2. 将全False的行替换为-1,新增为最后一列 df['first_true_index'] = first_true_col.where(df.any(axis=1), -1)
关键逻辑说明
idxmax(axis=1):沿行方向查找第一个True的列索引(布尔值中True等价于1,False等价于0,idxmax会返回第一个最大值的列标识)df.any(axis=1):判断每行是否存在至少一个True,生成布尔Serieswhere():仅当行内存在True时保留idxmax的结果,否则替换为-1
这个方法完全贴合你的需求,示例中会得到[-1,-1,8,-1,-1]的新增列结果,且比遍历方法效率高得多,尤其适合大尺寸的DataFrame。
内容的提问来源于stack exchange,提问作者Hao Zhou
相关产品推荐
相关产品推荐

