值计数、映射、分组和绘图

2024-09-24 22:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用IMDB数据进行一个个人项目,目前已经用尽了所有途径。在

快速概述:

  • 我想找十大最卖座的导演和演员
  • 我可以这样做,但我想更进一步,只有找到前10名,如果他们满足某些标准。曾主演过4部电影

到目前为止,我已经执行了以下操作:

plt.subplot2grid((2,3),(0,1))
actor_1 = df.pivot_table(index="Actor_1", values="Gross_Earnings", aggfunc='sum').sort_values(ascending=False)
actor_1[:15].sort_values(ascending=True).plot(kind='barh', width=0.7, alpha=0.5, color='red')
ax.tick_params(axis='x', labelsize=60)
ax.tick_params(axis='y', labelsize=60)
plt.xlabel("Gross Earnings")
plt.tight_layout()

plt.show()

这是可行的,但它只返回最高值,而不返回附加条件为>;4个胶片的最高值。在

我也尝试了以下方法:

^{pr2}$

但它返回以下错误:“AttributeError:无法访问“SeriesGroupBy”对象的可调用属性“map”,请尝试使用“apply”方法

no_of_films = df.groupby("Actor_1")
name_count_key = df["Actor_1"].value_counts().to_dict()
no_of_films["Films"] = no_of_films["Actor_1"].apply(name_count_key)

但它返回以下错误:“TypeError:unshable type:'dict'”

按函数分组的想法是创建一个名为“Films”的新列,因此计算每个演员主演的电影量,然后使用>;4,但它返回bools而不是实际值。在

Director        Actor_1         IMDB_Score   Gross_Earnings    Movie_Title
Andrew Stanton  Daryl Sabara    6.6          73058679          John Carter
Sam Raimi       J.K. Simmons    6.2          336530303         Spider-Man 3
Nathan Greno    Brad Garrett    7.8          200807262         Tangled
Joss Whedon     Chris Hemsworth 7.5          458991599         Avengers: Age of Ultron

这是可能的还是我太傻了?在

任何帮助都将不胜感激。在

谢谢

阿德里安


Tags: ofnodf电影pltsortimdbactor
1条回答
网友
1楼 · 发布于 2024-09-24 22:21:59

我想你需要filter或{a2}加{a3}:

print (df)
            Director          Actor_1  IMDB_Score  Gross_Earnings Movie_Title
0      James Cameron      CCH Pounder         7.9       760505847      Avatar
1      James Cameron      CCH Pounder         7.9       760505847     Avatar1
2      James Cameron      CCH Pounder         7.9       760505847     Avatar2
3      James Cameron      CCH Pounder         7.9       760505847     Avatar3
4     Gore Verbinski      Johnny Depp         7.1       309404152     Pirates
5         Sam Mendes  Christoph Waltz         6.8       200074175     Spectre
6     Gore Verbinski      Johnny Depp         7.1       309404152    Pirates1
7         Sam Mendes  Christoph Waltz         6.8       200074175    Spectre1
8  Christopher Nolan        Tom Hardy         8.5       448130642         The

df1 = df.groupby(["Actor_1"]).filter(lambda x: len(x) > 3)
print (df1)

        Director      Actor_1  IMDB_Score  Gross_Earnings Movie_Title
0  James Cameron  CCH Pounder         7.9       760505847      Avatar
1  James Cameron  CCH Pounder         7.9       760505847     Avatar1
2  James Cameron  CCH Pounder         7.9       760505847     Avatar2
3  James Cameron  CCH Pounder         7.9       760505847     Avatar3

或更快的解决方案:

^{pr2}$

然后使用^{}和聚合^{}

df2 = df1.groupby('Actor_1')['Gross_Earnings'].mean()
print (df2)
Actor_1
CCH Pounder    760505847
Name: Gross_Earnings, dtype: int64

最后一个绘图是^{}

df2.plot.barh()

相关问题 更多 >