Как следует из названия, я хочу вычесть коэффициент из даты, пока дата не окажется меньше другой даты.
op_d = {'ADate':[20200301,20200301,20200301,20200301,20200301,20200301],
'MDate':[20520801,20531001,20550405,20540701,20540910,20510701] ,
'EDate':[20200201,20200201,20200205,20200101,20190910,20200401] ,
'Frequency':[2,4,2,6,12,1]}
df = pd.DataFrame(data=op_d)
df['MDate'] = pd.to_datetime(df['MDate'], format='%Y%m%d')
df['ADate'] = pd.to_datetime(df['ADate'], format='%Y%m%d')
df['EDate'] = pd.to_datetime(df['EDate'], format='%Y%m%d')
в приведенном выше фрейме данных я сокращаю количество месяцев («Частота») от «MDate» до тех пор, пока оно не станет меньше «ADate». Ожидаемый результат сохраняется в поле «EDate».
Моя идея состоит в том, чтобы взять разницу в месяцах между «Mdate» и «ADate», затем разделить ее по частоте и удалить остаток из «ADate», что является длительным процессом.
df['tempDate'] = df.apply(lambda x: x['MDate'] - pd.DateOffset(months = x['Frequency']) , axis=1)
Приведенный выше код вычитает частоту только один раз. есть ли способ запустить это через некоторое время l oop для каждой строки или что-то в этом роде? т.е.
df['tempDate'] = df.apply(lambda x: x['MDate'] - pd.DateOffset(months = x['Frequency']) if df['tempDate'] < ['ADate'] , axis=1)