gpt4 book ai didi

Python如何使用数据框应用方法查找列的平均值

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:06 25 4
gpt4 key购买 nike

这是关于 Udacity 数据科学纳米学位的问题,我无法弄明白。说明是:

使用数据框的 apply 方法,创建一个名为 avg_medal_count 的新系列,它表示在 2014 年至少获得一枚任何奖牌的国家/地区获得的金牌、银牌和铜牌的平均数量索契奥运会。

我目前的代码是:

import numpy
from pandas import DataFrame, Series

def avg_medal_count():

countries = ['Russian Fed.', 'Norway', 'Canada', 'United States',
'Netherlands', 'Germany', 'Switzerland', 'Belarus',
'Austria', 'France', 'Poland', 'China', 'Korea',
'Sweden', 'Czech Republic', 'Slovenia', 'Japan',
'Finland', 'Great Britain', 'Ukraine', 'Slovakia',
'Italy', 'Latvia', 'Australia', 'Croatia', 'Kazakhstan']

gold = [13, 11, 10, 9, 8, 8, 6, 5, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
silver = [11, 5, 10, 7, 7, 6, 3, 0, 8, 4, 1, 4, 3, 7, 4, 2, 4, 3, 1, 0, 0, 2, 2, 2, 1, 0]
bronze = [9, 10, 5, 12, 9, 5, 2, 1, 5, 7, 1, 2, 2, 6, 2, 4, 3, 1, 2, 1, 0, 6, 2, 1, 0, 1]

olympic_medal_counts = {'country_name':countries,
'gold': Series(gold),
'silver': Series(silver),
'bronze': Series(bronze)}
df = DataFrame(olympic_medal_counts)


# YOUR CODE HERE


return avg_medal_count

我尝试了一些不同的事情,例如:

avg_medal_count = df.apply(numpy.mean),但收到错误消息,指出它无法将第一列转换为数字,这是有道理的,因为第一列是国家/地区列表。如何仅在金、银和铜列上使用 df.apply?我尝试过其他变体,但没有任何效果。我很确定我需要结合使用 df.applynumpy.mean,因为这是我刚刚学到的。有什么想法吗?

谢谢!

最佳答案

我会首先修改您将数据导入到的方式:

df = DataFrame(olympic_medal_counts).set_index('country_name')

然后我会计算一个新列,其中包含每个国家/地区奖牌总数的行总和。

df['medal total'] = df.sum(axis=1)

结果:

                   bronze  gold  silver  medal total
country_name
Russian Fed. 9 13 11 33
Norway 10 11 5 26
Canada 5 10 10 25
United States 12 9 7 28
Netherlands 9 8 7 24
Germany 5 8 6 19
Switzerland 2 6 3 11
Belarus 1 5 0 6
Austria 5 4 8 17
France 7 4 4 15
Poland 1 4 1 6
China 2 3 4 9
Korea 2 3 3 8
Sweden 6 2 7 15
Czech Republic 2 2 4 8
Slovenia 4 2 2 8
Japan 3 1 4 8
Finland 1 1 3 5
Great Britain 2 1 1 4
Ukraine 1 1 0 2
Slovakia 0 1 0 1
Italy 6 0 2 8
Latvia 2 0 2 4
Australia 1 0 2 3
Croatia 0 0 1 1
Kazakhstan 1 0 0 1

最后,为奖牌总数大于或等于 1 的行对 DataFrame 进行子集化,并求出列的平均值。

df[df['medal total'] >= 1].apply(np.mean)

结果:

bronze          3.807692
gold 3.807692
silver 3.730769
medal total 11.346154

这也可以在一行中使用:

df[ df.sum(axis=1) >= 1 ].apply(np.mean)

关于Python如何使用数据框应用方法查找列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com