Pandas中基于三列全零条件删除DataFrame行的问题求助
解决Pandas删除指定三列全为0的行的问题
错误原因分析
你之前的代码用&(逻辑与)连接三个条件,要求purchase_qty、other_adjustments、sold同时不为0才保留该行,这和你“仅删除三列全为0的行”的需求完全相反,导致所有purchase_qty为0的行都被错误过滤。
正确实现方式
有两种简洁写法可以满足需求:
方法1:取反“三列全为0”的判断
# 指定需要检查的目标列 cols_to_check = ['purchase_qty', 'other_adjustments', 'sold'] # 保留非三列全为0的行 test_df = df[~(df[cols_to_check] == 0).all(axis=1)]
df[cols_to_check] == 0:生成布尔DataFrame,标记每个单元格是否为0.all(axis=1):判断每行的所有目标列是否都为0(返回布尔Series)~:对结果取反,保留不是三列全为0的行
方法2:判断“至少有一列不为0”
cols_to_check = ['purchase_qty', 'other_adjustments', 'sold'] # 保留至少有一列不为0的行 test_df = df[(df[cols_to_check] != 0).any(axis=1)]
df[cols_to_check] != 0:标记每个单元格是否不为0.any(axis=1):判断每行是否至少有一列不为0,符合条件的行直接保留
验证结果
针对你的示例DataFrame,运行上述代码后,仅第0行(三列全为0)会被删除,其余行全部保留,完全匹配需求。
内容的提问来源于stack exchange,提问作者Arpan Ghimire
相关产品推荐
相关产品推荐

