我目前正在处理电影数据集,已将其过滤为每种类型每天的手表数量。我已将其过滤到数据框,如下所示:
我创建了一个具有2列(除索引外)的数据框,即'Date'
和'Genre'
。数据类型为datetime64[ns]
,而'Genre'
是object
。
要对此进行可视化:
Date Genre
2018-01-01 romance
2018-01-01 fiction
2018-01-01 romance
2018-01-02 drama
2018-01-02 romance
2018-01-02 fiction
2018-01-02 romance
2018-01-03 romance
2018-01-03 drama
此列表继续显示(整个2018年),它显示根据数据集,在2018年1月1日观看了Genre
爱情,小说和浪漫的三部电影。
问题:
我想绘制多线图,其中每条线代表不同的体裁。在x轴上,时间将以月显示,在y轴上,将显示手表的数量。我想做的是在同一张图中绘制每个流派,并显示每天该流派的手表数量,其中x轴以月为单位。
到目前为止,我已经尝试过:
按流派对电影数据帧进行排序,并将其存储在新变量中:
df_2018_rom = df_movies_2018[df_movies_2018.Genre == 'romance']
.groupby(['Genre', 'Date']).Date.count()
但是我似乎仍然无法绘制想要的图形。
感谢您的任何帮助!
答案 0 :(得分:2)
您可以通过使用pandas.crosstab
重塑DataFrame
来简单地做到这一点:
# if needed - make sure 'Date' is correct dtype
df_movies_2018['Date'] = pd.to_datetime(df['Date'])
# Filter to genres you're interested in
genres_to_plot = ['romance', 'drama', 'fiction']
df = df_movies_2018[df_movies_2018.Genre.isin(genres_to_plot)]
df_cross = pd.crosstab(df.Date, df.Genre)
df_cross.plot()
供参考,df_cross
如下:
Genre drama fiction romance
Date
2018-01-01 0 1 2
2018-01-02 1 1 2
2018-01-03 1 0 1
Pandas DataFrame.plot
方法会将DataFrame
中的每一列视为一个单独的系列(行),其中index
是默认的x轴值。