【问题标题】:Python: Filter rows in data frame when multiple rows meet a unique conditionPython:当多行满足唯一条件时过滤数据框中的行
【发布时间】:2020-07-22 05:17:52
【问题描述】:

我有一个类似的数据集:

    dt = {'A': [0,0,0,1], 
          'B': [0, 2,0,3],
          'C': [0,0,0,4],
          'D': [0,5,0,6]}
    dt = pd.DataFrame(dt)

我的目标是在该行的列 ['A', 'B','C', 'D'] 全部为零时过滤所有行。在实际数据集中,我有 超过 20 列,而不是 4 列。所以下面的解决方案是不可行的:

    dt = dt[(dt['A'] == 0) & (dt['B'] == 0) & (dt['C'] == 0) & (dt['D'] == 0)]

所以我想出了以下解决方案:

    dt['new'] = np.nan
    lst = [0,1,2,3]

    for i in range(len(dt)):
        dt.iloc[i, 4] = all(dt.iloc[i, lst] == 0) 

最后我可以根据“新”列进行过滤。

我正在寻找更有效的解决方案,最好是没有循环的解决方案,我们将不胜感激。

【问题讨论】:

    标签: python pandas dataframe filter


    【解决方案1】:

    您可以使用DataFrame.eqDataFrame.allboolean indexing 尝试此操作

    dt[dt.eq(0).all(1)]
    
       A  B  C  D
    0  0  0  0  0
    2  0  0  0  0
    

    另一个想法是使用np.anyDataFrame.any 作为布尔掩码

    dt[~dt.any(1)] # @Sayandip Dutta's answer in the comments
    dt[~np.any(dt, axis=1)]
    

    【讨论】:

    • 当然!这就是我没有添加答案的原因。
    【解决方案2】:

    试试这个,DataFrame.sum(axis=1)

    dt[dt.sum(axis=1).eq(0)]
    

       A  B  C  D
    0  0  0  0  0
    2  0  0  0  0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      相关资源
      最近更新 更多