跨列迭代条件以切片熊猫数据框

时间:2019-08-08 20:57:55

标签: python pandas dataframe

我要消除熊猫数据框中超过每一列第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中跨列迭代(又称:如何水平迭代)?

1 个答案:

答案 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