如何绘制按电影分组、Y轴统计in_movie总和的柱状图?
解决方法
你的问题出在直接用原始DataFrame绘图——原始数据中每个演员对应一条记录,绘图时会为每一行生成一个柱子,导致X轴电影名重复,Y轴仅显示单条记录的0/1值。正确步骤需要先聚合统计各电影的参演演员总数,再绘图:
1. 数据聚合处理
按电影名称分组,对in_movie列求和(参演标记为1,求和结果就是该电影的参演演员总数):
import pandas as pd import matplotlib.pyplot as plt # 假设你的原始DataFrame是df agg_df = df.groupby('movie_title')['in_movie'].sum().reset_index()
groupby('movie_title'):按电影名称分组sum():对每组的in_movie求和,得到该电影的参演人数reset_index():将分组后的索引(电影名)转为普通列,方便后续绘图识别X轴
2. 绘制柱状图
用聚合后的DataFrame绘图,此时X轴每个电影仅显示一次,Y轴为对应参演人数:
# 绘制柱状图,可添加参数优化显示 agg_df.plot.bar(x='movie_title', y='in_movie', rot=0, figsize=(8, 5)) plt.xlabel('电影名称') plt.ylabel('参演演员总数') plt.title('各电影参演演员数量统计') plt.show()
rot=0:让X轴标签横向显示,避免重叠figsize:调整图表的宽高尺寸- 设置坐标轴标签和标题,让图表更直观
示例完整代码
# 构造示例数据 data = { 'movie_title': ['Ghost', 'Ghost', 'Ghost', 'Titanic', 'Titanic', 'Inception'], 'actors': ['Patrick Swayze', 'Demi Moore', 'Whoopi Goldberg', 'Leonardo DiCaprio', 'Kate Winslet', 'Leonardo DiCaprio'], 'in_movie': [1, 1, 1, 1, 1, 1] } df = pd.DataFrame(data) # 聚合数据 agg_df = df.groupby('movie_title')['in_movie'].sum().reset_index() # 绘图 agg_df.plot.bar(x='movie_title', y='in_movie', rot=0, figsize=(8, 5)) plt.xlabel('电影名称') plt.ylabel('参演演员总数') plt.title('各电影参演演员数量统计') plt.show()
内容的提问来源于stack exchange,提问作者nic.o
相关产品推荐
相关产品推荐

