У меня есть фрейм данных panadas, который в основном представляет собой агрегированное представление о том, что происходит в определенный день. Однако не все дни включены в четырехмесячное окно. Например,
dates = ['2019-02-27', '2019-02-16', '2019-02-01', '2019-01-15']
count_s = [2,3,4,5]
df = pd.DataFrame({'dates': dates, 'count': count_s})
df["dates_ind"] = pd.to_datetime(df["dates"], format = "%Y-%m-%d")
df.index = pd.DatetimeIndex(df["dates_ind"])
Мне нужно создать новый фрейм данных, в котором есть все дни (4 месяца по отношению к сегодняшнему дню). Если даты совпадают между двумя кадрами данных (новый и df), мне нужно создать новый столбец из 1 или 0. Если он существует в df, он должен быть отмечен 1 или 0.






col = df.dates.apply(lambda x: 1 if x in dates else 0)
вы можете заменить «col» на имя столбца фрейма данных.
в течение 4 месяцев относительного. Вы можете использовать pd.offsets.MonthBegin, а затем использовать конечный эксклюзивный дневной диапазон дат:
dts = pd.date_range(month_start, month_start + pd.offsets.MonthBegin(1), closed = "left")
Обратите внимание, что month_start должен быть datetime.datetime, а не строкой.
Создайте свой new_df с помощью pd.date_range, затем проверьте, есть ли индекс в вашем другом DataFrame. pd.offsets.DateOffset(months=4) дает вам вычитание календарного месяца, которое не будет пересекать границы месяца, когда в месяцах разное количество дней.
import pandas as pd
today = pd.to_datetime('today').normalize()
df_new = pd.DataFrame(index=pd.date_range(today-pd.offsets.DateOffset(months=4),
today, freq='D'))
df_new['exist'] = df_new.index.isin(df.index).astype(int)
df_new exist
2018-11-06 0
2018-11-07 0
2018-11-08 0
...
2019-02-26 0
2019-02-27 1
2019-02-28 0
2019-03-01 0
2019-03-02 0
2019-03-03 0
2019-03-04 0
2019-03-05 0
2019-03-06 0
Это не включает все дни (относительно 4 месяцев)