Pandas如何删除最后3列值为0的行(无需指定固定列名)
pandas动态取最后3列过滤全0行实现方法
核心思路
不需要硬编码最后3列的列名,通过pandas的位置索引直接定位最后3列,基于这3列的值做行过滤即可,列名动态变动也不会影响逻辑。
完整实现代码
import pandas as pd # 测试数据构造 df1 = pd.DataFrame({ 'Region': ['LCA', 'BCC', 'AAC'], 'Jul': [233, 0, 0], 'Aug': [345, 0, 0], 'Sep': [366, 0, 0] }) # 过滤逻辑:保留最后3列不全为0的行 df_processed = df1[df1.iloc[:, -3:].ne(0).any(axis=1)]
逻辑说明
df1.iloc[:, -3:]:按位置选择数据,第一个冒号选中所有行,-3:表示从倒数第3列开始取到最后一列,完全不依赖列名,适配列名动态变化的场景。.ne(0):逐元素判断值是否不等于0,返回同形状的布尔型DataFrame,非0值位置为True,0值位置为False。.any(axis=1):按行做逻辑判断,只要一行内有任意一个位置为True(即最后3列不全是0),该行就标记为保留;如果最后3列全为0,该行标记为过滤。
逻辑调整说明
如果你的业务规则是「最后3列只要出现0就删除该行」,也就是要求最后3列全为非0值才保留,把判断逻辑里的.any(axis=1)替换为.all(axis=1)即可。
示例数据运行上述代码后,得到的处理结果如下:
Region Jul Aug Sep 0 LCA 233 345 366
内容的提问来源于stack exchange,提问作者toerag
相关产品推荐
相关产品推荐

