J.Doe
J.Doe

Reputation: 549

Plot line plot per weekday and week number

I have the following data. This represents the number of occurrences in January:

date      value    WeekDay WeekNo Year   Month
2018-01-01  214.0   Monday  1    2018    1
2018-01-02  232.0   Tuesday 1    2018    1
2018-01-03  147.0   Wed     1    2018    1
2018-01-04  257.0   Thursd  1    2018    1
2018-01-05  164.0   Friday  1    2018    1
2018-01-06  187.0   Saturd  1    2018    1
2018-01-07  201.0   Sunday  1    2018    1
2018-01-08  141.0   Monday  2    2018    1
2018-01-09  152.0   Tuesday 2    2018    1
2018-01-10  167.0   Wednesd 2    2018    1
2018-01-15  113.0   Monday  3    2018    1
2018-01-16  139.0   Tuesday 3    2018    1
2018-01-17  159.0   Wednesd 3    2018    1
2018-01-18  202.0   Thursd  3    2018    1
2018-01-19  207.0   Friday  3    2018    1
...         ...        ...       ...    ...

WeekNo is the number of the week in a year.

My goal is to have a line plot showing the evolution of occurrences, for this particular month, per week number. Therefore, I'd like to have the weekday in the x-axis, the occurrences on the y-axis and different lines, each with a different color, for each week (and a legend with the color that corresponds to each week).

Does anyone have any idea how this could be done? Thanks a lot!

Upvotes: 0

Views: 864

Answers (1)

Horace
Horace

Reputation: 1054

You can first reshape your dataframe to a format where the columns are the week number and one row per weekday. Then, use the plot pandas method:

reshaped = (df
            .assign(date=lambda f: pd.to_datetime(f.date))
            .assign(dayofweek=lambda f: f.date.dt.dayofweek, 
                    dayname=lambda f: f.date.dt.weekday_name)
            .set_index(['dayofweek', 'dayname', 'WeekNo'])
            .value
            .unstack()
            .reset_index(0, drop=True))

print(reshaped)
reshaped.plot(marker='x')
WeekNo         1      2      3
dayname                       
Monday     214.0  141.0  113.0
Tuesday    232.0  152.0  139.0
Wednesday  147.0  167.0  159.0
Thursday   257.0    NaN  202.0
Friday     164.0    NaN  207.0
Saturday   187.0    NaN    NaN
Sunday     201.0    NaN    NaN

plot

Upvotes: 1

Related Questions