【问题标题】:Combining functions (AND)组合函数 (AND)
【发布时间】:2015-05-29 14:26:11
【问题描述】:

我有一个关于组合功能的问题。

我的目的是同时应用两个功能。基本上,我想通过寻找数据集最低部分的 5% 分位数和另一端的最高 % 来削减我的数据集的极值。

df = df[df.temperature >= df.temperature.quantile(.05)]

获取高于 5% 分位数的值

df = df[df.temperature <= df.temperature.quantile(.95)]

获取所有低于 95% 分位数的值。

我现在的问题是

df = df[df.temperature >= df.temperature.quantile(.05)]
df = df[df.temperature <= df.temperature.quantile(.95)]

有效,但它并不精确,因为第二个函数建立在前一个剪辑之上。那么如何同时切割两者呢?

df = df[df.temperature >= df.temperature.quantile(.05) & <=    df.temperature.quantile(.95)]

不工作。

感谢支持!

已解决:

df = df[(df.temperature >= df.temperature.quantile(.05)) & (df.temperature

【问题讨论】:

    标签: python pandas ipython-notebook


    【解决方案1】:

    由于运算符优先级,您需要在条件周围加上括号:

    f = df[(df.temperature >= df.temperature.quantile(.05)) & (df.temperature <= df.temperature.quantile(.95))]
    

    docs 表明&gt;= 的优先级低于&amp;,因此您需要括号,此外您的代码应该会引发模棱两可的错误。

    在代码风格方面,将条件作为变量更具可读性,因此我会将其重写为:

    low_limit = df.temperature >= df.temperature.quantile(.05)
    upper_limit = df.temperature >= df.temperature.quantile(.95)
    

    那么你的过滤就变成了:

    df[(low_limit) & (upper_limit)]
    

    你可以随意改变

    low_limit = df.temperature >= df.temperature.quantile(.05)
    

    low_limit = (df.temperature >= df.temperature.quantile(.05))
    

    所以你不需要过滤中的括号

    【讨论】:

    • 这几乎是正确的,但我可以修复它:df = df[(df.temperature >= df.temperature.quantile(.05)) & (df.temperature
    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2015-01-07
    • 2011-12-28
    相关资源
    最近更新 更多