【问题标题】:On use of any method使用任何方法
【发布时间】:2021-01-26 11:10:00
【问题描述】:

来自 Kaggle 的代码,据说可以删除轮廓:

outliers_mask = (ft.abs() > ft.abs().quantile(outl_thresh)).any(axis=1)

不会返回一个布尔值吗?一个项目是否在列表中? 那么代码所说的是,将 Ft 中高于分位数(由另一个变量引入)的所有绝对值保存在掩码中? Any 代表什么?做什么的?谢谢。

【问题讨论】:

    标签: pandas any


    【解决方案1】:

    我认为第一部分返回由布尔值True 或/和False 填充的DataFrame:

    (ft.abs() > ft.abs().quantile(outl_thresh))
    

    添加DataFrame.any 用于测试每行是否至少有一个True 到布尔值Series

    df = pd.DataFrame({'a':[False, False, True],
                       'b':[False, True, True],
                       'c':[False, False, True]})
                            
    print (df)
           a      b      c
    0  False  False  False
    1  False   True  False
    2   True   True   True
    
    print (df.any(axis=1))
    0    False <- no True per rows
    1     True <- one True per rows
    2     True <- three Trues per rows
    dtype: bool
    

    测试所有值是否为Trues 的类似方法是DataFrame.all

    print (df.all(axis=1))
    0    False
    1    False
    2     True
    dtype: bool
    

    原因是boolean indexing 过滤是必要的布尔系列,而不是布尔数据帧。

    另一个示例数据:

    np.random.seed(2021) 
    
    ft = pd.DataFrame(np.random.randint(100, size=(10, 5))).sub(20)
    print (ft)
        0   1   2   3   4
    0  65  37 -20  74  66
    1  24  42  71   9   1
    2  73   4  -8  50  50
    3  13 -13 -19  77   6
    4  46  28  79  43  29
    5  -4  30  34  32  73
    6 -15  29  18  -6  51
    7  65  50  21   1   5
    8 -10  16  -1  37  62
    9  70  -5  20  56  33
    
    outl_thresh = 0.95
    
    print (ft.abs().quantile(outl_thresh))
    0    71.65
    1    46.40
    2    75.40
    3    75.65
    4    69.85
    Name: 0.95, dtype: float64
    

    print((ft.abs() > ft.abs().quantile(outl_thresh)))
           0      1      2      3      4
    0  False  False  False  False  False
    1  False  False  False  False  False
    2   True  False  False  False  False
    3  False  False  False   True  False
    4  False  False   True  False  False
    5  False  False  False  False   True
    6  False  False  False  False  False
    7  False   True  False  False  False
    8  False  False  False  False  False
    9  False  False  False  False  False
    
    outliers_mask = (ft.abs() > ft.abs().quantile(outl_thresh)).any(axis=1)
    print (outliers_mask)
    0    False
    1    False
    2     True
    3     True
    4     True
    5     True
    6    False
    7     True
    8    False
    9    False
    dtype: bool
    

    df1 = ft[outliers_mask]
    print (df1)
        0   1   2   3   4
    2  73   4  -8  50  50
    3  13 -13 -19  77   6
    4  46  28  79  43  29
    5  -4  30  34  32  73
    7  65  50  21   1   5
        0   1   2   3   4
        
    df2 = ft[~outliers_mask]
    print (df2)
        0   1   2   3   4
    0  65  37 -20  74  66
    1  24  42  71   9   1
    6 -15  29  18  -6  51
    8 -10  16  -1  37  62
    9  70  -5  20  56  33
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2012-03-12
      • 2015-01-09
      相关资源
      最近更新 更多