Pandas数据框将计算应用于所选行

时间:2016-03-11 04:48:19

标签: python pandas median

我正在尝试使用Median Absolute Deviation计算数据集中的异常值。我的数据集是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

如何进行如下所示的数组计算。我希望每一行都有一个'中位数' value,应该是具有相同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?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用groupbymap

功能
$sql = "SELECT CASE WHEN count(*) > 0 THEN 1 
        ELSE 0 END AS userComplete FROM Users 
        WHERE userID = ':userID' 
        AND userField1 IS NOT NULL
        AND userField2 IS NOT NULL";

输出:

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