我想过滤掉熊猫中具有"许多"零值的列。 过滤由"所有零值"组成的列并不难,但我想做的是过滤具有"许多零值"的列,例如,超过 75% 的列值。
数据集(A 有 3 个零,共 4 个值,占列值的 75%。
A B C
0 0 0
0 0 1
0 1 2
1 2 3
结果
B C
0 0
0 1
1 2
2 3
有什么建议吗?
您可以使用boolean mask
的mean
,其中True
值转换为1
,然后反转条件 ->=
<
过滤所有mean
较少的列,如下所示0.75
:
print ((df == 0).mean())
a 0.75
b 0.50
c 0.25
dtype: float64
print ((df == 0).mean() < 0.75)
a False
b True
c True
dtype: bool
df = df.loc[:, (df == 0).mean() < 0.75]
print (df)
b c
0 0 1
1 0 1
2 1 0
3 1 1
您可以使用列表推导,sum
函数和drop
df = pd.DataFrame({'a':[0,0,0,1],'b':[0,0,1,1],'c':[1,1,0,1]})
mask = [i for i,j in enumerate((df == 0).astype(int).sum(axis=0).values) if (j/df.shape[0])>=0.75]
df = df.drop(df.columns[mask], axis=1)
您可以根据需要设置百分位数。
输出:如果为75百分位数,即(j/df.shape[0])>=0.75
乙 c 0 0 1 1 0 1 2 1 0 3 1 1 输出
:如果为 50 百分位数,即(j/df.shape[0])>=0.50
C 0 1 1 1 2 0 3 1