- Фрейм данных имеет столбцы «START», «CLOSE», каждый
представляющий дату.
- В столбец «WOM» добавляется неделя месяца, чтобы узнать, на какую неделю месяца выпадает данная дата начала (от 1 до 5).
- Добавлен еще один столбец «END» с условием, если «WOM» меньше 4, то используется в тех же месяцах в прошлом ЗАКРЫТЬ, а «END» еще используется в следующем
последние месяцы закрываются как END.
Следующий код выполняет вышесказанное, но не создает правильный столбец END:
import pandas as pd
start = pd.date_range('2016-06-01', '2018-06-27', freq='7D')
close = start.shift(1) - pd.Timedelta('1Day')
df = pd.DataFrame({'START':start, 'CLOSE':close}, columns=['START', 'CLOSE'])
#Week of the month
df['WOM'] = df.START.apply(lambda x: (x.day-1)//7+1)
#Get end list
ends = df['CLOSE']
ends.index = ends
ends = ends.resample('M').last()
def get_end(x):
try:
wom = x['WOM']
st = x['START']
me = ends.searchsorted(st)
print(f'{st:%Y-%m-%d}_{wom}_{me[0]}')
if wom >= 4:
return ends.iloc[me[0] +1]
else:
return ends.iloc[me[0]]
except:
return None
df['END'] = df.apply(lambda x: get_end(x), axis=1 )
Выделенный столбец на изображении должен был быть 2016-07-26 вместо
2016-08-30, что не так и как можно это исправить?
![enter image description here](https://i.stack.imgur.com/jYGAK.png)