Я работаю над получением финансовых данных, в которых одни отформатированы ежеквартально, а другие - ежедневно. Моя модель будет нуждаться во всем этом ежедневно, поэтому мне нужно, чтобы одно и то же квартальное значение повторялось каждый день. Я использовал этот публикацию стека и пытался адаптировать код к моим данным.
Вот мой заголовок кадра данных:
date ticker value
0 31/03/1980 ECB/RA6 1.0
1 30/06/1980 ECB/RA6 4.0
2 30/09/1980 ECB/RA6 2.0
3 30/12/1980 ECB/RA6 3.0
4 31/03/1981 ECB/RA6 2.0
Вот мой желаемый результат:
date ticker value
0 01/01/1980 ECB/RA6 1.0
1 02/01/1980 ECB/RA6 1.0
2 03/01/1980 ECB/RA6 1.0
3 04/01/1980 ECB/RA6 1.0
4 05/01/1980 ECB/RA6 1.0
. . . .
. . . .
. . . .
91 01/04/1980 ECB/RA6 4.0
И мой код:
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
df = df.pivot(index='date', columns='ticker')
start_date = df.index.min() - pd.DateOffset(day=1)
end_date = df.index.max() + pd.DateOffset(day=31)
dates = pd.date_range(start_date, end_date, freq='d')
dates.name = 'date'
df = df.reindex(dates, method='ffill')
df = df.stack('ticker')
df = df.sortlevel(level=1)
df = df.reset_index()
Теперь я понимаю, в чем проблема, но я считаю, что это не должно быть проблемой. Я запускаю следующий код из @Pierre D (после удаления дубликатов):
df = df.set_index('date') # assuming 'date' is a proper Timestamp
df.index = df.index.to_period('Q') # turn index into PeriodIndex('Q')
df = df.set_index('ticker', append=True).squeeze()
df2 = df[df.duplicated( keep = False)]
Я получаю следующий вывод для df2:
value value2
date ticker
1997Q2 AAPL 46850 NaN
1997Q3 AAPL 46850 NaN
2003Q1 MSFT 10137 19/12/2003
2003Q2 MSFT 10137 19/12/2003
Как видите, индекс отличается, но значение и значение2 в этих случаях равны. Я считаю, что это не должно быть проблемой, но когда я сейчас запускаю:
df.unstack()
Я получаю следующую ошибку: ValueError: Индекс содержит повторяющиеся записи, не может изменить форму
Заранее спасибо всем!