如何基于Pandas DataFrame行的所有横向列值条件删除对应行
实现方法
首先构造示例DataFrame的参考代码如下:
import pandas as pd df = pd.DataFrame( [[0,0,0], [0,1,0], [1,1,1]], index = ['a', 'b', 'c'] )
要实现按行总和过滤行,直接按行维度求和后做布尔索引筛选即可,推荐直接保留符合条件的行,逻辑更清晰:
# 仅保留行总和不为0的行 df = df[df.sum(axis=1) != 0]
如果更习惯先筛选要删除的行再调用drop方法删除,也可以用下面的写法:
# 筛选出行总和为0的行索引后删除 del_rows = df[df.sum(axis=1) == 0].index df.drop(del_rows, inplace=True)
扩展说明
如果你需要的是删除所有元素全为0的行,而不是仅总和为0的行(避免出现正负值相加总和为0的误删情况),可以换成全量匹配判断:
# ~ 代表取反,仅保留不是全为0的行 df = df[~(df == 0).all(axis=1)]
所有涉及行维度的判断逻辑,只要把axis参数设为1就可以实现逐行计算,你可以根据自己的实际判断条件替换布尔筛选规则即可。
内容的提问来源于stack exchange,提问作者AlanCA
相关产品推荐
相关产品推荐

