This is a good one since the tests actually pass with invisible bars (since the test is not checking that…). The clue was that it works for May and no other month and that month is the only month that has same name and three letter short form, which is what
df_bar['month'] = [d.strftime('%b') for d in df_bar.date]
is actually storing in your data frame. You just need to store the long name in your data frame too (there is a pandas date time method just for this) so that it matches your month labels.