Mike U
Mike U

Reputation: 3061

Group DataFrame by Business Day of Month

I am trying to group a Pandas DataFrame that is indexed by date by the business day of month, approx 22/month.

I would like to return a result that contains 22 rows with mean of some value in `DataFrame.

I can by day of month but cant seem to figure out how to by business day.

Is there a function that will return the business day of month of a date?

if someone could provide a simple example that would be most appreciated.

Upvotes: 1

Views: 1830

Answers (2)

Antonbass
Antonbass

Reputation: 329

I think what the question is asking is to groupby business day of month - the other answer just seems to resample the data to the nearest business day (at least for me). This code returns a groupby object with 22 rows

from datetime import date
import pandas as pd
import numpy as np

d = pd.Series(np.random.randn(1000), index=pd.bdate_range(start='01 Jan 2018', periods=1000))
def to_bday_of_month(dt):
    month_start = date(dt.year, dt.month, 1)
    return np.busday_count(month_start, dt)

day_of_month = [to_bday_of_month(dt) for dt in d.index.date]
d.groupby(day_of_month).mean()

Upvotes: 1

Stefan
Stefan

Reputation: 42905

Assuming your dates are in the index (if not use 'set_index):

df.groupby(pd.TimeGrouper('B')) 

See time series functionality.

Upvotes: 2

Related Questions