Дублирующая строка на основе даты начала и окончания - PullRequest
0 голосов
/ 09 октября 2018

Я не смог найти способ сделать следующее: Мои данные выглядят следующим образом:

Time (CET)        Start              Duration(min)  End
2015-02-01 00:00  2015-02-01 00:00   2              2015-02-01 00:02

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

Time (CET)        Start              Duration(min)  End
2015-02-01 00:00  2015-02-01 00:00   2              2015-02-01 00:02
2015-02-01 00:01  2015-02-01 00:00   2              2015-02-01 00:02
2015-02-01 00:02  2015-02-01 00:00   2              2015-02-01 00:02

В кадре данных конца и конца столбец начала и окончания больше не требуется.Я думал об использовании shift, но не был уверен, что это сразу и как использовать аргумент freq.Есть идеи как это сделать?

Столбцы времени представлены в формате даты и времени, а время (CET) является индексом.

Спасибо за тонну!

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете повторить строки на Index.repeat с помощью loc и добавить временные интервалы, созданные с помощью cumcount с помощью to_timedelta к столбцу Time (CET):

print (df)
         Time (CET)             Start  Duration(min)               End
0  2015-02-01 00:00  2015-02-01 00:00              2  2015-02-01 00:02
1  2015-02-02 00:00  2015-02-02 00:00              3  2015-02-02 00:02

#convert columns to datetimes
c = ['Time (CET)','Start','End']
df[c] = df[c].apply(pd.to_datetime)

df = df.loc[df.index.repeat(df['Duration(min)'] + 1)]
df['Time (CET)'] += pd.to_timedelta(df.groupby(level=0).cumcount(), unit='s') * 60
df = df.reset_index(drop=True).drop(['Start','End'], axis=1)
print (df)
           Time (CET)  Duration(min)
0 2015-02-01 00:00:00              2
1 2015-02-01 00:01:00              2
2 2015-02-01 00:02:00              2
3 2015-02-02 00:00:00              3
4 2015-02-02 00:01:00              3
5 2015-02-02 00:02:00              3
6 2015-02-02 00:03:00              3
...