Найти все даты конкретной строки с помощью Python панды - PullRequest
0 голосов
/ 24 августа 2018
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 строк, так что это не эффективные решения.Есть ли более эффективное решение?

Примечание: начало и конец - это годовой, ежемесячный, ежедневный .... формат.Я привел ежегодный пример.

1 Ответ

0 голосов
/ 24 августа 2018

Может быть, мы можем использовать stack с groupby range

df.set_index('id').stack().groupby(level=0).apply(lambda x : pd.Series(list(range(x.iloc[0],x.iloc[1]+1)))).reset_index()
Out[746]: 
   id  level_1     0
0   1        0  2001
1   1        1  2002
2   1        2  2003
3   1        3  2004
4   1        4  2005
5   2        0  2004
6   2        1  2005
7   2        2  2006
8   2        3  2007
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...