我有一个名为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
答案 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()
您不需要使用aggregate
或transform
如果price/sqm
是浮动的,则只需使用以下命令对其进行转换:
FP['price/sqm'].astype(float)
希望它能解决您的问题。