У меня есть фрейм данных с именем 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, и я попробовал следующие коды, чтобы преобразовать его в число с плавающей точкой, но я либо получаю сообщение об ошибке, либо он все равно возвращается как 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