У меня есть нижеприведенный фрейм данных (индекс даты и времени, в котором все рабочие дни в нас указаны)
import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
import random
us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
dt_rng = pd.date_range(start='1/1/2018', end='12/31/2018', freq=us_bd)
n1 = [round(random.uniform(20, 35),2) for _ in range(len(dt_rng))]
n2 = [random.randint(100, 200) for _ in range(len(dt_rng))]
df = pd.DataFrame(list(zip(n1,n2)), index=dt_rng, columns=['n1','n2'])
print(df)
n1 n2
2018-01-02 24.78 197
2018-01-03 23.33 176
2018-01-04 33.19 128
2018-01-05 32.49 110
... ... ...
2018-12-26 31.34 173
2018-12-27 29.72 166
2018-12-28 31.07 104
2018-12-31 33.52 184
[251 rows x 2 columns]
Для каждой строки в столбце n1
как получить значения из одного и того жеколонка для того же дня следующего месяца?(если значение для этого точного дня недоступно (из-за выходных или праздничных дней), тогда следует получить значение на следующую доступную дату.).Я попытался использовать df.n1.shift(21)
, но он не работает, так как точные рабочие дни в каждом месяце отличаются.
Ожидаемый результат, как показано ниже
n1 n2 next_mnth_val
2018-01-02 25.97 184 28.14
2018-01-03 24.94 133 27.65 # three values below are same, because on Feb 2018, the next working day after 2nd is 5th
2018-01-04 23.99 143 27.65
2018-01-05 24.69 182 27.65
2018-01-08 28.43 186 28.45
2018-01-09 31.47 104 23.14
... ... ... ...
2018-12-26 29.06 194 20.45
2018-12-27 29.63 158 20.45
2018-12-28 30.60 148 20.45
2018-12-31 20.45 121 20.45
для декабря, значение следующего месяца должно быть последним значением фрейма данных, т. Е. Значением по индексу 2018-12-31
(20.45).
пожалуйста, помогите.