【问题标题】:Pandas dataframe apply calculations to selected rowsPandas 数据框将计算应用于选定的行
【发布时间】:2016-03-11 04:48:19
【问题描述】:

我正在尝试使用中值绝对偏差计算数据集中的异常值。我的数据集是 3 列,2000 行,格式如下:

Km      Price   id
139000  8500    2010 holden cruze cdx jg auto
173000  8500    2010 holden cruze cdx jg auto
95000   8800    2008 honda civic vti-l auto
141000  8800    2010 holden cruze cdx jg auto
169078  8880    1999 mazda mx-5 manual

我怎样才能进行如下的数组计算。我希望每一行都有一个“中值”值,它应该是具有相同 id 的所有行的中值。

model = '2010 holden cruze cdx jg auto'
data[data['id']==model]['median'] = data[data['id']==model]['Price'].median()

以下语句为每个模型提供了正确的中位数,我只是不知道如何快速将其应用于“中位数”列中的每一行。

median = data[data['id']==model]['Price'].median()

或者,或者,我对中值绝对偏差的方法是否错误 - 有没有更快/更简单的方法来使用 pandas/numpy?

【问题讨论】:

    标签: python pandas median


    【解决方案1】:

    您可以使用transform 返回与数据帧长度相同的系列:

    df['median'] = df.groupby('id').Price.transform('median')
    
    >>> df
           Km  Price                             id  median
    0  139000   8500  2010-holden-cruze-cdx-jg-auto    8500
    1  173000   8500  2010-holden-cruze-cdx-jg-auto    8500
    2   95000   8800    2008-honda-civic-vti-l-auto    8800
    3  141000   8800  2010-holden-cruze-cdx-jg-auto    8500
    4  169078   8880         1999-mazda-mx-5-manual    8880
    

    【讨论】:

      【解决方案2】:

      您可以使用函数groupbymap

      data['median'] = data['id'].map(data.groupby('id')['Price'].median())
      print data
      

      输出:

             Km  Price                             id  median
      0  139000   8500  2010-holden-cruze-cdx-jg-auto    8500
      1  173000   8500  2010-holden-cruze-cdx-jg-auto    8500
      2   95000   8800    2008-honda-civic-vti-l-auto    8800
      3  141000   8800  2010-holden-cruze-cdx-jg-auto    8500
      4  169078   8880         1999-mazda-mx-5-manual    8880
      

      【讨论】:

        猜你喜欢
        • 2017-09-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多