панды получают nth до последнего дня месяца - PullRequest
0 голосов
/ 25 октября 2018

С учетом фрейма данных внутридневных данных:

                          Open       High        Low       Last     Volume  No. Trades   Close Bid  No. Bids   Close Ask  No. Asks
Timestamp                                                                                                                         
1996-01-02 09:30:00        NaN        NaN        NaN        NaN        NaN         NaN   61.375000       1.0   61.406250       1.0
1996-01-02 09:31:00   61.40625   61.40625   61.40625   61.40625     4100.0         1.0         NaN       NaN         NaN       NaN
1996-01-02 09:32:00   61.40625   61.40625   61.40625   61.40625      100.0         1.0   61.375000       2.0   61.406250       2.0
1996-01-02 09:33:00        NaN        NaN        NaN        NaN        NaN         NaN   61.406250       2.0   61.437500       2.0
1996-01-02 09:35:00        NaN        NaN        NaN        NaN        NaN         NaN   61.390625       1.0   61.421875       1.0

Как выбрать дни, которые находятся на расстоянии n дней от конца месяца?Я хочу использовать groupby (), но я не уверен, как, что касается внутридневных данных, потому что в моем индексе больше, чем просто дневные значения.

def select_days(data, n_days, rtn = ''):

    ### select business days
    ts_days = pd.to_datetime(data.index.date)
    businessDays = pd.bdate_range(start=data.index[0].date(), end=data.index[-1].date())
    data = data[ts_days.isin(businessDays)]

    ### select T-n days     
    data[(data.index.days_in_month - data.index.day)==n_days]
    return data

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Нет необходимости для groupby здесь.Сначала получите серию, в которой указаны дни месяца для этой конкретной строки:

days_in_month = df.index.daysinmonth

Далее получите серию, которая является днем ​​месяца

day_of_month = df.index.day

Теперь вы можетепросто сделайте:

df[(days_in_month - day_of_month).to_series().between(0, n_days)]

Где n_days - ваш параметр.

0 голосов
/ 25 октября 2018

трюки панд:

df['days_to_month_end'] = df.index.days_in_month - df.index.day
df[df.days_to_month_end==n]

или в одну строку:

df[(df.index.days_in_month - df.index.day)==n]
0 голосов
/ 25 октября 2018

Чтобы обобщить это для набора данных с несколькими месяцами, я бы сгруппировал дни с конца месяца и выбрал нужную группу.Хитрость заключается в том, что вы не можете просто выбрать дни определенного числа, поскольку дата последнего дня меняется от месяца к месяцу.

from calendar import monthrange

def days_until_end(date):
    _, last_day = monthrange(date.year, date.month)
    return last_day - date.day

df.groupby(days_until_end).get_group(N)

Где N - количество дней до окончаниямесяца, на который вы хотите настроить таргетинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...