将派生字段更改为浮点并获取派生字段的平均值

时间:2018-09-01 09:28:01

标签: python pandas dataframe pandas-groupby

我有一个名为FP的数据框,其中有13列,派生了一个名为price/sqm的新字段,并删除了10列。

FP['price/sqm'] = FP['price'] / FP['floor_area_sqm']
FP = FP.loc[:,['year', 'town', 'type', 'price/sqm']]

数据框有700,000行,看起来像这样:

   year   town    type     price/sqm
0  1990   AMK   1 ROOM    290.322581
1  1990   AMK   1 ROOM    193.548387
2  1990   AMK   1 ROOM    258.064516
3  1990   AMK   1 ROOM    193.548387
4  1990   AMK   3 ROOM    646.575342
5  1990   AMK   3 ROOM    686.567164

我正在尝试使用以下代码根据price/sqm['year','town','type']进行平均,但是我得到了TypeError: incompatible index of inserted column with frame index

FP['avg_price/sqm'] = FP.groupby(['year', 'town', 'type'])['price/sqm'].aggregate(mean)

对于不同的数据框,我有一个类似的代码可以工作,所以我不确定为什么它不适用于此代码。另一个代码是gdp['yearly_gdp'] = gdp.groupby(['year'])['value'].transform(sum)

我之所以假设它是因为price/sqm是一个str,并尝试了以下代码将其转换为float,但是我遇到了错误,或者它仍返回str。

FP['price/sqm'] = float(FP['price/sqm'])
FP['price/sqm'] = FP['price/sqm'].astype(float)
FP['price/sqm'] = pd.to_numeric(FP['price/sqm'], errors = 'coerce')
FP[['price/sqm']] = FP[['price/sqm']].apply(pd.to_numeric)

有人可以建议我如何解决此问题吗?

FP.dtypes:

   year   town    type     price/sqm
0  1990   AMK   1 ROOM    290.322581
1  1990   AMK   1 ROOM    193.548387
2  1990   AMK   1 ROOM    258.064516
3  1990   AMK   1 ROOM    193.548387
4  1990   AMK   3 ROOM    646.575342
5  1990   AMK   3 ROOM    686.567164
year        object
town        object
type        object
price/sqm   float64
dtype: object

df1.dtypes:

month               object
town                object
type                object
block               object
street_name         object
storey_range        object
floor_area_sqm      float64
flat_model          object
lease_commence_date int64
resale_price        int64
dtype:       object

2 个答案:

答案 0 :(得分:0)

我认为这对您有用,因为您可以根据数据帧的索引来转换结果

FP['avg_price/sqm'] = FP.groupby(['year', 'town', 'type'])['price/sqm'].transform(lambda x:x.mean())

答案 1 :(得分:0)

您可以使用:

FP['avg_price/sqm'] = FP.groupby(['year', 'town', 'type'])['price/sqm'].mean()

和:

gdp['yearly_gdp'] = gdp.groupby(['year'])['value'].sum()

您不需要使用aggregatetransform

如果price/sqm是浮动的,则只需使用以下命令对其进行转换:

FP['price/sqm'].astype(float)

希望它能解决您的问题。