为了账号安全,请及时绑定邮箱和手机立即绑定

groupby.mean() 不起作用,而 sum()、std() 和 size() 都起作用

groupby.mean() 不起作用,而 sum()、std() 和 size() 都起作用

梦里花落0921 2022-04-23 21:23:44
我正在关注密歇根大学关于 Python Pandas 中的数据科学的 MOOC,我在测试中遇到了一些问题。我必须使用 groupby 函数来计算按大陆分组的 15 个国家的总和、平均值、大小和标准差。问题是 sum()、std() 和 size() 可以正常工作,但 mean() 不行,我不知道为什么。我已经尝试通过使用来指定类型,dtype=float但我不工作。这是我的代码:# --------- This part is ok, just describing so you can understand --------- #Top15 = answer_one() # load top 15 countries with most scientific publications# list of the continents for the top 15 countriesContinentDict  = {'China':'Asia',                   'United States':'North America',                   'Japan':'Asia',                   'United Kingdom':'Europe',                   'Russian Federation':'Europe',                   'Canada':'North America',                   'Germany':'Europe',                   'India':'Asia',                  'France':'Europe',                   'South Korea':'Asia',                   'Italy':'Europe',                   'Spain':'Europe',                   'Iran':'Asia',                  'Australia':'Australia',                   'Brazil':'South America'}# estimation of the population for each countries # by calculating the Energy Supply / Energy Supply per CapitaTop15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']Top15 = Top15[['PopEst']]Top15.reset_index(inplace = True)Top15['Continent'] = None# loop that add the coresponding continent to the countryfor country in Top15['Country']:    index_country = ((Top15.loc[Top15['Country'] == country]) # seek country index                           .index)    Top15.iloc[index_country,2] = ContinentDict[country] # add continent to country
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

这是一个错误Pandas,即使数据不是数字,Pandas 仍然在 groupby 中进行 sum 和 prod 计算。我检查了源代码,该错误出现site-packages\pandas\core\groupby\groupby.py. 它写道:

                except Exception:
                                    pass

如果您打印错误,您可能还会发现“没有要聚合的数字类型”。

作为一种解决方案,您可以在使用以下方法进行任何计算之前将数据更改为数值:

df['column'] = pd.to_numeric(df['column'])

某些帖子可能会告诉您在errors='coerce'内部添加,pd.to_numeric以便将替换非数字元素na并且不会引发错误。但是,在许多情况下,这意味着数据中存在一些错误。我们需要修复数据而不是消除错误。


查看完整回答
反对 回复 2022-04-23
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这是我能想到的最好的


    final["Sum"]= final.groupby(['Cont_bin']).PopEst.transform('sum')

    final['Sum'] = pd.to_numeric(final['Sum'])

    final["PopEst"]= pd.to_numeric(final["PopEst"])

    final["Size"]=pd.to_numeric(final["Size"])

    final["Mean"]=final.groupby(['Cont_bin', 'Size']).PopEst.transform('mean')

   

    return(final)

您需要将平均值强制转换为数字以获得标准偏差


查看完整回答
反对 回复 2022-04-23
  • 2 回答
  • 0 关注
  • 304 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信