【问题标题】:Changing a derived field to float and getting the average of the derived field将派生字段更改为浮动并获取派生字段的平均值
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以使用:

    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)

    希望它能解决你的问题。

    【讨论】:

    • 我已经尝试了所有这些变体,但在使用 FP.groupby 时出现错误
    • 试试groupby(['year', 'town', 'type'], as_index=False)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-05-16
    • 2022-12-12
    • 2014-06-11
    相关资源
    最近更新 更多