У меня есть фрейм данных, как показано ниже
df = pd.DataFrame({
'subject_id':[1,1,1,1,1,1,1,2,2,2,2,2],
'time_1' :['2173-04-03 12:35:00','2173-04-03 12:50:00','2173-04-05
12:59:00','2173-05-04 13:14:00','2173-05-05 13:37:00','2173-07-06
13:39:00','2173-07-08 11:30:00','2173-04-08 16:00:00','2173-04-09
22:00:00','2173-04-11 04:00:00','2173- 04-13 04:30:00','2173-04-14 08:00:00'],
'val' :[5,5,5,5,1,6,5,5,8,3,4,6]})
df['time_1'] = pd.to_datetime(df['time_1'])
df['day'] = df['time_1'].dt.day
df['month'] = df['time_1'].dt.month
Как видно из приведенного выше фрейма данных, между ними мало пропущенных дат. Я хотел бы создать новые записи для этих дат и заполнить значения непосредственно предыдущей строкой.
def dt(df):
r = pd.date_range(start=df.date.min(), end=df.date.max())
df.set_index('date').reindex(r)
new_df = df.groupby(['subject_id','month']).apply(dt)
. Создаются все даты.Я только хочу найти пропущенную дату в пределах интервала ввода даты для каждого предмета для каждого месяца
Я попробовал код из этой связанной записи .Хотя это помогло мне, но не дает ожидаемого результата для этого обновленного / нового требования.Поскольку мы оставляем соединение, оно копирует все записи.Я также не могу выполнить внутреннее объединение, потому что оно пропустит несоответствующий столбец.Я хочу сочетание левого и внутреннего соединения
В настоящее время он создает новые записи для всех 365 дней в году, которые я не хочу.что-то вроде ниже.Этого не ожидается
Я только хочу добавить пропущенные даты между входным интервалом дат, как показано ниже.Например subject = 1, в 4-м месяце есть записи с 3-го и 5-го.но 4-й отсутствует.Итак, мы добавляем запись только за 4-й день.Нам не нужны 6-е, 7-е и т. Д., В отличие от токового выхода.Аналогично в 7-м месяце пропадает запись за 7-й день.поэтому мы просто добавляем новую запись для этого
Я ожидаю, что мой вывод будет таким, как показано ниже