【问题标题】:How to filter out entries in a data frame with specific and different values?如何过滤掉具有特定和不同值的数据框中的条目?
【发布时间】:2019-01-23 21:52:31
【问题描述】:

我有这个房地产数据:

neighborhood  type_property  type_negotiation  price
Smallville       house           rent        2000
Oakville       apartment       for sale      100000
King Bay         house         for sale      250000
...

我有这个 groupby 来识别数据集中的哪些值是待售房屋,然后在名为 df_breakdown 的新数据框中返回每个社区的这些房屋的第 10 个和第 90 个百分位数和数量。结果如下所示:

neighborhood tenthpercentile  ninetiethpercentile  Quantity
King Bay         250000.0             250000.0         1
Smallville        99000.0             120000.0         8
Oakville          45000.0             160000.0         6
...

我现在想将此信息带回我的原始房地产数据集,并过滤掉所有待售房屋,如果它是针对每个社区计算的百分位超过 90% 或低于 10% 的待售房屋。例如,我想要过滤掉 Oakville 附近价格为 350000 的房子。

我以前用过这个论点:

df1 = df[df.price < df.price.quantile(.90)]

但我不知道如何将它用于每个社区的不同值,或者即使它有用。提前感谢您的帮助。

【问题讨论】:

    标签: python pandas function loops dataframe


    【解决方案1】:

    您可以将它们设置为具有相同的索引,广播百分位数,然后使用.between

    首先,

    df2 = df2.set_index('neighborhood')
    df = df.set_index('neighborhood')
    

    然后,broadcast 使用 loc

    df.loc[:, 't'], df.loc[:, 'n'] = df2.tenthpercentile, df2.ninetiethpercentile
    

    最后,

    df.price.between(df.t, df.n)
    

    产生

    neighborhood
    Smallville    False
    Oakville       True
    King Bay       True
    King Bay      False
    dtype: bool
    

    所以要过滤,只需切片

    df[df.price.between(df.t, df.n)]
    

    【讨论】:

      【解决方案2】:

      可能不是最优雅的,但您可以将百分位数聚合加入每个房地产数据。

      df.join(df.groupby('neighborhood').quantile([0.1,0.9]), on='neighborhood')

      在移动设备上,如果语法不完美,请见谅。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2022-11-19
        • 1970-01-01
        • 2019-09-20
        • 2018-10-21
        相关资源
        最近更新 更多