如何过滤掉具有特定和不同值的数据框中的条目?

Posted

技术标签:

【中文标题】如何过滤掉具有特定和不同值的数据框中的条目?【英文标题】: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)]

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

【问题讨论】:

【参考方案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')

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

【讨论】:

以上是关于如何过滤掉具有特定和不同值的数据框中的条目?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 选择具有特定值的不同 ID

在 seaborn 中绘制不同的组时如何将数据作为一组包含在内

过滤掉超过一定数量的 NaN 的行

scala 根据具有相同值的 2 列过滤掉连接 df 中的行 - 最佳方式

如何限制用户搜索视图中的特定模型?

删除具有一个不同值的重复行[重复]