如何过滤掉具有特定和不同值的数据框中的条目?
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')
在移动设备上,如果语法不完美,请见谅。
【讨论】:
以上是关于如何过滤掉具有特定和不同值的数据框中的条目?的主要内容,如果未能解决你的问题,请参考以下文章
在 seaborn 中绘制不同的组时如何将数据作为一组包含在内