如何找到同一年所有分数的平均值 (Python)
How can I find the average of all scores with the same year (Python)
我正在使用 Jupyter Notebook 分析电影数据的 .CSV 文件。我创建了一个较小的示例来说明我遇到的问题。以下是与电影相关的年份和分数的示例。如果给定的电影是同一年我想找到那一年所有电影的平均值并在图表中显示平均值。目前只显示最高分。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
xx = [ 1994, 2008, 2010, 2018, 2018] #year
yy = [ 8.9, 9.0, 8.8, 7.8, 5.2] #scores
plt.bar(xx, yy)
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
我已经尝试了很多,但似乎无法弄清楚。如果有人能提供帮助,我将不胜感激。
matplotlib
是一个可视化数据的包。为了分析数据(比如寻找平均年数),你可以使用 pandas
包。我鼓励您阅读更多相关信息。
给你样品:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(data={"Year":[ 1994, 2008, 2010, 2018, 2018], "Score": [ 8.9, 9.0, 8.8, 7.8, 5.2]})
years_list = []
avg_scores = []
for year in np.unique(df["Year"]):
years_list.append(year)
avg_scores.append(df.loc[df["Year"]==year, "Score"].mean())
plt.bar(years_list, avg_scores)
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
起初我创建了一个数据框对象来存储数据。然后我创建了一个列表来保存所有年份和每年的平均分数。 for
循环在所有年份中迭代,并且对于每一年,它对同一年所有电影的得分进行平均。最后几行只是在绘制它们。
使用 pandas 有更有效的方法(例如 groupby
),但如果您不熟悉 pandas,可能会有点混乱,所以我建议开始从那个解决方案。
groupby
解决方案将像这样工作:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(data={"Year":[ 1994, 2008, 2010, 2018, 2018], "Score": [ 8.9, 9.0, 8.8, 7.8, 5.2]})
plt.bar(df.grouby('Year').mean())
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
它按“年份”列对所有电影进行分组,并取每组内的平均值。它的映射在一定程度上取决于您的数据的外观(如果有任何其他列),所以不要指望只是 copy-paste 它。
我正在使用 Jupyter Notebook 分析电影数据的 .CSV 文件。我创建了一个较小的示例来说明我遇到的问题。以下是与电影相关的年份和分数的示例。如果给定的电影是同一年我想找到那一年所有电影的平均值并在图表中显示平均值。目前只显示最高分。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
xx = [ 1994, 2008, 2010, 2018, 2018] #year
yy = [ 8.9, 9.0, 8.8, 7.8, 5.2] #scores
plt.bar(xx, yy)
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
我已经尝试了很多,但似乎无法弄清楚。如果有人能提供帮助,我将不胜感激。
matplotlib
是一个可视化数据的包。为了分析数据(比如寻找平均年数),你可以使用 pandas
包。我鼓励您阅读更多相关信息。
给你样品:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(data={"Year":[ 1994, 2008, 2010, 2018, 2018], "Score": [ 8.9, 9.0, 8.8, 7.8, 5.2]})
years_list = []
avg_scores = []
for year in np.unique(df["Year"]):
years_list.append(year)
avg_scores.append(df.loc[df["Year"]==year, "Score"].mean())
plt.bar(years_list, avg_scores)
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
起初我创建了一个数据框对象来存储数据。然后我创建了一个列表来保存所有年份和每年的平均分数。 for
循环在所有年份中迭代,并且对于每一年,它对同一年所有电影的得分进行平均。最后几行只是在绘制它们。
使用 pandas 有更有效的方法(例如 groupby
),但如果您不熟悉 pandas,可能会有点混乱,所以我建议开始从那个解决方案。
groupby
解决方案将像这样工作:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(data={"Year":[ 1994, 2008, 2010, 2018, 2018], "Score": [ 8.9, 9.0, 8.8, 7.8, 5.2]})
plt.bar(df.grouby('Year').mean())
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()
它按“年份”列对所有电影进行分组,并取每组内的平均值。它的映射在一定程度上取决于您的数据的外观(如果有任何其他列),所以不要指望只是 copy-paste 它。