Pandas dataframe 将计算应用于选定的行
Pandas dataframe apply calculations to selected rows
我正在尝试使用中值绝对偏差计算数据集中的离群值。我的数据集是 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
我怎样才能像下面这样进行数组计算。我希望每一行都有一个 'median' 值,该值应该是具有相同 id 的所有行的中位数。
model = '2010 holden cruze cdx jg auto'
data[data['id']==model]['median'] = data[data['id']==model]['Price'].median()
下面的语句为每个模型提供了正确的中位数,我只是不知道如何快速将它应用到 'median' 列中的每一行。
median = data[data['id']==model]['Price'].median()
或者,我的中值绝对偏差方法是否错误 - 是否有 quicker/easier 方法可以用 pandas/numpy 做到这一点?
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
您可以使用 transform
其中 returns 与数据帧长度相同的系列:
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
我正在尝试使用中值绝对偏差计算数据集中的离群值。我的数据集是 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
我怎样才能像下面这样进行数组计算。我希望每一行都有一个 'median' 值,该值应该是具有相同 id 的所有行的中位数。
model = '2010 holden cruze cdx jg auto'
data[data['id']==model]['median'] = data[data['id']==model]['Price'].median()
下面的语句为每个模型提供了正确的中位数,我只是不知道如何快速将它应用到 'median' 列中的每一行。
median = data[data['id']==model]['Price'].median()
或者,我的中值绝对偏差方法是否错误 - 是否有 quicker/easier 方法可以用 pandas/numpy 做到这一点?
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
您可以使用 transform
其中 returns 与数据帧长度相同的系列:
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