如何找到同一年所有分数的平均值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循环在所有年份中都在迭代,并且每年对同一年所有电影的得分进行平均。最后几行只是在绘制它们。

有很多更有效的方法来处理大熊猫(例如groupby),但是如果您不熟悉大熊猫,可能会有些困惑,所以我建议从该解决方案开始。 groupby解决方案将像这样工作:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(data={"Year":[ 1994,5.2]})

plt.bar(df.grouby('Year').mean())
plt.xlabel('Years')
plt.ylabel('Scores')
plt.title('Scores over the Years')
plt.show()

它按“年”列对所有电影进行分组,并取每个组中的平均值。它的映射取决于您的数据的外观(如果有其他任何列),因此不要指望仅将其复制粘贴。