id start end
1 2001 2005
2 2004 2007
output
id date
1 2001
1 2002
1 2003
1 2004
1 2005
2 2004
2 2005
2 2006
2 2007
my logics
df=pd.concat([pd.DataFrame({'start': pd.date_range(row.start, row.end, freq='AS'),
'id': row.id}, columns=['start', 'id'])
for i, row in df.iterrows()], ignore_index=True)
df1 = (pd.concat([pd.Series(r.id, pd.date_range(r.start, r.end, freq='AS')) for r in df.itertuples()]) .reset_index())
Мой фрейм данных содержит не менее 300 000 строк, так что это не эффективные решения.Есть ли более эффективное решение?
Примечание: начало и конец - это годовой, ежемесячный, ежедневный .... формат.Я привел ежегодный пример.