【发布时间】:2018-09-01 09:28:01
【问题描述】:
我有一个名为 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
我正在尝试使用下面的代码根据['year','town','type'] 对price/sqm 进行平均,但我得到了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
【问题讨论】:
-
df.groupby(['year', 'town', 'type']).mean()不行吗? -
或者你想要
FP['avg_price/sqm'] = df.groupby(['year', 'town', 'type'])['price/sqm'].transform('mean')? -
两种方法都出现同样的错误
-
FP.dtypes向您展示了什么 - 您可以在 edit 您的问题中加入吗? -
如果
FP['price/sqm'] = FP['price'] / FP['floor_area_sqm']有效 - 那么price/sqm不可能是字符串...
标签: python pandas dataframe pandas-groupby