用于DataFrame的分位数上的惯用剪辑 [英] Idiomatic clip on quantile for DataFrame

查看:243
本文介绍了用于DataFrame的分位数上的惯用剪辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据每一列的分位数来裁剪DataFrame中的异常值.假设

I am trying to clip outliers in the DataFrame based on quantiles for each column. Let's say

df = pd.DataFrame(pd.np.random.randn(10,2))

0   1
0   0.734355    0.594992
1   -0.745949   0.597601
2   0.295606    0.972196
3   0.474539    1.462364
4   0.238838    0.684790
5   -0.659094   0.451718
6   0.675360    -1.286660
7   0.713914    0.135179
8   -0.435309   -0.344975
9   1.200617    -0.392945

我目前正在使用

df_clipped = df.apply(lambda col: col.clip(*col.quantile([0.05,0.95]).values))

0   1
0   0.734355    0.594992
1   -0.706865   0.597601
2   0.295606    0.972196
3   0.474539    1.241788
4   0.238838    0.684790
5   -0.659094   0.451718
6   0.675360    -0.884488
7   0.713914    0.135179
8   -0.435309   -0.344975
9   0.990799    -0.392945

这有效,但我想知道是否有更优雅的基于pandas/numpy的方法.

This works but I am wondering if there is a more elegant pandas/numpy based approach.

推荐答案

您可以使用clip并在第一个轴上对齐:

You can use clip and align on the first axis:

df.clip(df.quantile(0.05), df.quantile(0.95), axis=1)
Out: 
          0         1
0  0.734355  0.594992
1 -0.706864  0.597601
2  0.295606  0.972196
3  0.474539  1.241788
4  0.238838  0.684790
5 -0.659094  0.451718
6  0.675360 -0.884488
7  0.713914  0.135179
8 -0.435309 -0.344975
9  0.990799 -0.392945

这篇关于用于DataFrame的分位数上的惯用剪辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆