如何通过函数传递数据帧并返回另一个数据帧?

时间:2018-08-14 16:31:00

标签: python pandas function dataframe

我有一个数据框,其中包含有关邻里,房产类型,谈判类型和价格的房地产信息。看起来像这样:

**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

谢谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的代码中有一些错误:

  1. 使用pd.DataFrame构造函数构造一个新的数据框。
  2. 作为二维对象,应将列表列表馈入构造函数。请注意,两个打开和关闭的方括号都存在。
  3. 对于数据帧的长度,请使用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')