使用任何方法
On use of any method
一段来自 Kaggle 的代码,据说可以去除大纲:
outliers_mask = (ft.abs() > ft.abs().quantile(outl_thresh)).any(axis=1)
Any return 不是布尔值吗?一个项目是否在列表中?
那么代码说的是,将 Ft 中高于分位数(由另一个变量引入)的所有绝对值保存在掩码中? Any 代表什么?做什么的?谢谢。
我认为第一部分 return DataFrame 由布尔值填充 True
or/and False
:
(ft.abs() > ft.abs().quantile(outl_thresh))
so 添加了 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
如果所有值都是 True
s 的类似测试方法是 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
一段来自 Kaggle 的代码,据说可以去除大纲:
outliers_mask = (ft.abs() > ft.abs().quantile(outl_thresh)).any(axis=1)
Any return 不是布尔值吗?一个项目是否在列表中? 那么代码说的是,将 Ft 中高于分位数(由另一个变量引入)的所有绝对值保存在掩码中? Any 代表什么?做什么的?谢谢。
我认为第一部分 return DataFrame 由布尔值填充 True
or/and False
:
(ft.abs() > ft.abs().quantile(outl_thresh))
so 添加了 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
如果所有值都是 True
s 的类似测试方法是 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