Вперед заполнение пропущенных дат в Dataframe Python Pandas - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть кадр данных Panda, который заполняется следующим образом:

ref_date    tag
1/29/2010   1
2/26/2010   3
3/31/2010   4
4/30/2010   4
5/31/2010   1
6/30/2010   3
8/31/2010   1
9/30/2010   4
12/31/2010  2

Обратите внимание, что в данных отсутствуют месяцы (т. Е. 7, 10, 11).Я хочу заполнить отсутствующие данные с помощью метода прямого заполнения, чтобы он выглядел следующим образом:

ref_date    tag
1/29/2010   1
2/26/2010   3
3/31/2010   4
4/30/2010   4
5/31/2010   1
6/30/2010   3
7/30/2010   3
8/31/2010   1
9/30/2010   4
10/29/2010  4
11/30/2010  4
12/31/2010  2

Тег отсутствующей даты будет иметь тег предыдущего .Все даты представляют последний рабочий день месяца.

Это то, что я пытался сделать:

idx = pd.date_range(start='1/29/2010', end='12/31/2010', freq='BM')
df.ref_date.index = pd.to_datetime(df.ref_date.index)
df = df.reindex(index=[idx], columns=[ref_date], method='ffill')

Это дает мне ошибку:

TypeError: Невозможно сравнить тип 'Timestamp' с типом 'int'

, где pd - это pandas, а df - это информационный фрейм.

Я новичок в Pandas Dataframe, поэтому любая помощь будет принята!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Спасибо предыдущему человеку, который ответил на этот вопрос, но удалил свой ответ.Я получил решение:

df[ref_date] = pd.to_datetime(df[ref_date])
idx = pd.date_range(start='1/29/2010', end='12/31/2010', freq='BM')
df = df.set_index(ref_date).reindex(idx).ffill().reset_index().rename(columns={'index': ref_date})
0 голосов
/ 20 сентября 2018

Вы были очень близки, вам просто нужно установить индекс кадра данных с помощью ref_date, переиндексировать его до индекса окончания месяца рабочего дня, указав ffill в методе, затем сбросить индекс и переименовать обратно к исходному:

# First ensure the dates are Pandas Timestamps.
df['ref_date'] = pd.to_datetime(df['ref_date'])

# Create a monthly index.
idx_monthly = pd.date_range(start='1/29/2010', end='12/31/2010', freq='BM')

# Reindex to the daily index, forward fill, reindex to the monthly index.
>>> (df
     .set_index('ref_date')
     .reindex(idx_monthly, method='ffill')
     .reset_index()
     .rename(columns={'index': 'ref_date'}))
     ref_date  tag
0  2010-01-29  1.0
1  2010-02-26  3.0
2  2010-03-31  4.0
3  2010-04-30  4.0
4  2010-05-31  1.0
5  2010-06-30  3.0
6  2010-07-30  3.0
7  2010-08-31  1.0
8  2010-09-30  4.0
9  2010-10-29  4.0
10 2010-11-30  4.0
11 2010-12-31  2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...