pandas筛选至少两列值大于0的行且保留原始数据的实现方法
解决方案
你之前代码的问题出在第一行df[df > 0] = 1直接对原数据做了赋值修改,实际上你完全不需要改动原有数据就能完成计算,正确实现方式如下:
# 新增F列存储每行是否符合要求的布尔值 df['F'] = (df > 0).sum(axis=1) >= 2 # 如果需要单独提取符合条件的行,直接用布尔索引筛选即可,不会修改原df数据 result_df = df[df['F']]
实现逻辑说明
df > 0会生成一个和原DataFrame结构完全一致的布尔矩阵,大于0的位置为True,否则为False,整个过程不会修改原数据的任何值sum(axis=1)对布尔矩阵按行求和(计算时True会被自动识别为1,False识别为0),得到每行中大于0的列的总数量- 将求和结果和
>=2做比较,得到的布尔序列直接赋值给新列F,原有所有列的数据都会完整保留
拿你给出的示例数据测试,得到的结果和你期望的输出完全一致。
内容的提问来源于stack exchange,提问作者Isidora
相关产品推荐
相关产品推荐

