我有一个数据框,其中包含有关邻里,房产类型,谈判类型和价格的房地产信息。看起来像这样:
**neighborhood type_property type_negotiation price**
Smallville house rent 2000
Oakville apartment for sale 100000
King Bay house for sale 250000
.
.
我想做的是通过一个函数,该函数按我进入的邻域对数据框进行排序,如果它是房屋,如果要出售,则满足这些要求的属性数量,并给出第90个百分位数和百分之十。
我到目前为止的功能和代码如下,但是我一直遇到多种语法和其他错误:
def function(string):
a = df[(df.type_negotiation == 'for sale')&(df.type_property == 'house')&(df.neighborhood == string)
b = pd.new_df([a.price.quantile(.10),a.price.quantile(.90),a.shape], columns=('tenthpercentile','ninetiethpercentile','Quantity'))
return b
谢谢您的帮助。
答案 0 :(得分:3)
您的代码中有一些错误:
pd.DataFrame
构造函数构造一个新的数据框。len(a)
或len(a.index)
或a.shape[0]
。 a.shape
返回一个大小为2的元组,表示行和列的数量。顺便说一句,这与(2)中的要求紧密相关。最后,您将获得一个单行数据帧:
def foo(string):
a = df[(df.type_negotiation == 'forsale')&(df.type_property == 'house')&(df.neighborhood == string)]
b = pd.DataFrame([[a.price.quantile(0.1), a.price.quantile(0.9), len(a.index)]],
columns=('tenthpercentile', 'ninetiethpercentile', 'Quantity'))
return b
print(foo('KingBay'))
tenthpercentile ninetiethpercentile Quantity
0 250000.0 250000.0 1
更惯用和通用的解决方案,将数据框作为函数的输入参数,并利用pd.DataFrame.pipe
:
def foo(df, string):
# as before
df.pipe(foo, 'KingBay')