You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多列条件截断DataFrame,拆分全False属性行至新DataFrame

解决基于DataFrame多列条件迁移行的问题

没问题,这是个非常典型的DataFrame数据拆分需求,我来一步步带你实现想要的效果。

首先先确认下你的示例数据,用代码重新呈现下:

import pandas as pd

dd = pd.DataFrame({ 
    'file': ['file1','file2','file3','file4','file5','file6','file7','file8','file9'], 
    'prop1': [True,False,False,False,False,False,False,False,False], 
    'prop2': [False,False,False,False,False,False,False,True,False], 
    'prop3': [False,True,False,True,False,True,False,False,True] 
})

接下来咱们的核心需求是:把prop1、prop2、prop3全为False的行(也就是file3、file5、file7)从原DataFrame dd 中移除,同时转移到一个新的DataFrame里。

实现步骤

  1. 创建筛选条件
    我们可以用any(axis=1)来判断每行是否有至少一个True,取反后就得到了所有列全为False的行:

    # 生成掩码:True表示该行三个prop全为False
    mask = ~(dd[['prop1', 'prop2', 'prop3']].any(axis=1))
    

    这里解释下:dd[['prop1', 'prop2', 'prop3']].any(axis=1)会对每行进行判断,只要有一个列是True就返回True;前面加~取反,就得到了三个列全为False的行的掩码。

  2. 生成新的DataFrame
    用上面的掩码筛选出符合条件的行,注意要用.copy()避免后续操作影响原数据:

    dd_new = dd[mask].copy()
    
  3. 更新原DataFrame
    你有两种方式移除原DataFrame中的目标行:

    • 方式一:重新赋值(不会修改原对象,更安全)
      dd = dd[~mask]
      
    • 方式二:原地删除(直接修改原DataFrame)
      dd.drop(dd[mask].index, inplace=True)
      

验证结果

现在你可以打印两个DataFrame看看效果:

print("原DataFrame(已移除目标行):")
print(dd)
print("\n新DataFrame(包含目标行):")
print(dd_new)

输出结果会是:

原DataFrame(已移除目标行):
file prop1 prop2 prop3
0 file1 True False False
1 file2 False False True
3 file4 False False True
5 file6 False False True
7 file8 False True False
8 file9 False False True

新DataFrame(包含目标行):
file prop1 prop2 prop3
2 file3 False False False
4 file5 False False False
6 file7 False False False

小提示

如果担心误操作原数据,建议先复制一份原DataFrame再进行拆分,比如:

dd_original = dd.copy()
# 后续操作基于dd_original进行

内容的提问来源于stack exchange,提问作者Contra111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:12:43