我要消除熊猫数据框中超过每一列第99个百分位的行。
例如:
df = pd.DataFrame({"Col1":[1,2,3,4,100], "Col2":[11,12,13,100, 14]})
我想水平迭代,而不是进行 n 次:
z1 = np.nanpercentile(a=df["Col1"], q=0.99) # 99th percentile of col1
z2 = np.nanpercentile(a=df["Col2"], q=0.99) # 99th percentile of col2
df = df.loc[df["Col2"] < z1]
df = df.loc[df["Col1"] < z2]
我注意到我应该先定义所有第99个百分位数,然后再删除行,因为这样做会影响其余列的第99个百分位数。无论如何,我尝试了以下操作:
for column in df:
z = np.nanpercentile(df[column])
df = df.loc[df[column] < z]
如何在Python中跨列迭代(又称:如何水平迭代)?
答案 0 :(得分:3)
您可以为此使用DataFrame.quantile
,并检查all
的值是否在第99个百分位中。通过这种方式,您可以删除具有高于第99个百分位数的一个或多个值的行:
m = df.le(df.quantile(q=0.99)).all(1)
df[m]
输出
Col1 Col2
0 1 11
1 2 12
2 3 13
详细信息
df.le(df.quantile(q=0.99))
返回一个布尔数组:
Col1 Col2
0 True True
1 True True
2 True True
3 True False
4 False True