[英]Time series plot showing unique occurrences per day
我有一個數據框,我想在其中制作一個時間序列圖,其中包含三條不同的線,每條線顯示另一列中每個值的每日出現次數(每天的行數)。
舉個例子,對於下面的數據框,我想看看每天有多少個a、b和c的發展。
df = pd.DataFrame({'date':pd.to_datetime(['2019-10-10','2019-10-14','2019-10-09','2019-10-10','2019-10-08','2019-10-14','2019-10-10','2019-10-08','2019-10-08','2019-10-13','2019-10-08','2019-10-12','2019-10-11','2019-10-09','2019-10-08']),
'letter':['a','b','c','a','b','b','b','b','c','b','b','a','b','a','c']})
但是,當我嘗試下面的命令(到目前為止我的最佳猜測)時,它不會過濾不同的日期(我想要代表每個字母的三行。
關於如何解決這個問題的任何想法?
df.groupby(['date']).count().plot()['letter']
我也在 Matplotlib 中嘗試了一個解決方案,盡管這個給出了一個錯誤..
fig, ax = plt.subplots()
ax.plot(df['date'], df['letter'].count())
根據您的問題,我相信您正在尋找一個線圖,它在 X 軸上有日期,在 Y 軸上有字母數。 為此,您需要執行以下步驟...
size()
reset_index()
平分組數據框,將新列重命名為Counts
並按letter
列排序(以便圖例以字母格式顯示數據)......這些更多地與保持新數據框和圖形清潔和像樣。 我建議您分別執行每個步驟並打印,以便您知道每個步驟中發生了什么代碼如下所示......
df = pd.DataFrame({'date':pd.to_datetime(['2019-10-10','2019-10-14','2019-10-09','2019-10-10','2019-10-08','2019-10-14','2019-10-10','2019-10-08','2019-10-08','2019-10-13','2019-10-08','2019-10-12','2019-10-11','2019-10-09','2019-10-08']),
'letter':['a','b','c','a','b','b','b','b','c','b','b','a','b','a','c']})
df_grouped = df.groupby(by=['date', 'letter']).size().reset_index() ## New DF for grouped data
df_grouped.rename(columns = {0 : 'Counts'}, inplace = True)
df_grouped.sort_values(['letter'], inplace=True)
colors = ['r', 'g', 'b'] ## New list for each color, change as per your preference
for i, ltr in enumerate(df_grouped.letter.unique()):
plt.plot(df_grouped[df_grouped.letter == ltr].date, df_grouped[df_grouped.letter == ltr].Counts, '-o', label=ltr, c=colors[i])
plt.gcf().autofmt_xdate() ## Rotate X-axis so you can see dates clearly without overlap
plt.legend() ## Show legend
輸出圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.