按熊猫中值的百分位数过滤列



我想过滤掉熊猫中具有"许多"零值的列。 过滤由"所有零值"组成的列并不难,但我想做的是过滤具有"许多零值"的列,例如,超过 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 maskmean,其中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

最新更新