Skip to content
Advertisement

Show Average Per Month

I have the following dataset:

Datset example

I am trying to create a graph using matplotlib that shows the average number of task by Month & Year.

I was able to complete the calculations for average and was converted the date column to show only the Month and Year. However, when I go to plot, only the year appears.

avg1 = df.groupby(pd.PeriodIndex(df['Date'], freq="M"))['Task Count'].mean().to_frame().reset_index()

avg1 = avg.rename(columns = {"Task Count":'Avg # of Task'})

Plotting:

avg.plot(x="Date", y="Avg # of Tasks",figsize=(15,8))

How do I show the month and year in the graph?

Advertisement

Answer

The data you have provided is very small (3 rows with same date). So, I couldn’t create a month-wise plot. So, this is the data I used.

>> df
    Date    Task Count
0   2022-06-25 04:00:00 700
1   2022-06-25 05:00:00 1100
2   2022-06-25 06:00:00 800
3   2022-06-25 07:00:00 1200
4   2022-06-25 08:00:00 700
5   2022-06-25 09:00:00 1400
6   2022-07-25 10:00:00 1600
7   2022-07-03 11:00:00 397
8   2022-07-03 12:00:00 100
9   2022-07-03 13:00:00 400
10  2022-08-03 14:00:00 500
11  2022-08-03 15:00:00 400
12  2022-08-03 16:00:00 300
13  2022-08-03 17:00:00 500
14  2022-08-03 18:00:00 300
15  2022-08-03 19:00:00 400 

You have used avg/avg1 and Task/Tasks alternatively. So, I just used avg and Task instead. This is the updated code

avg = df.groupby(pd.PeriodIndex(df['Date'], freq="M"))['Task Count'].mean().to_frame().reset_index()
avg = avg.rename(columns = {"Task Count":'Avg # of Task'})
avg.plot(x="Date", y="Avg # of Task",figsize=(5,5))

…which gives below line plot. You can see both month and year. Hope this is what you are looking for.

enter image description here

Also, you can use the below code to create a bar chart, which I think might be more relevant in your case. There are many many other graphs you can try out as well…

df=pd.read_excel('myinput.xlsx', 'Sheet19')
avg = df.groupby(pd.PeriodIndex(df['Date'], freq="M"))['Task Count'].mean().to_frame().reset_index()
avg = avg.rename(columns = {"Task Count":'Avg # of Task'})
plt=avg.plot(kind='bar',x="Date", y="Avg # of Task",figsize=(5,5))

enter image description here

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement