У меня есть следующий фрейм данных:

    ID  time
0   12  2017-09-17 15:30:00
1   13  2017-09-24 18:00:00

Я хотел бы добавить 1 час до каждого значения времени и 2 часа после с минутной частотой:

    ID  time
0   12  2017-09-17 14:30:00
1   12  2017-09-17 14:31:00
2   12  2017-09-17 14:32:00
3   12  2017-09-17 14:33:00
...
59  12  2017-09-17 15:29:00
60  12  2017-09-17 15:30:00
...
179 12  2017-09-17 17:29:00
180 12  2017-09-17 17:30:00
181 13  2017-09-24 17:00:00
...

Кто-нибудь знает, как генерировать такие смещения?

0
Douy789 30 Май 2019 в 21:19

2 ответа

Лучший ответ

Это должно сработать.

import pandas as pd

# Sample data
data = pd.DataFrame({
               "ID": ["ID1", "ID2"], 
               "time": ["2017-09-17 15:30:00", "2017-09-24 18:00:00"]
               })

data['time'] = pd.to_datetime(data['time'])
print(data.head())
    ID                time
0  ID1 2017-09-17 15:30:00
1  ID2 2017-09-24 18:00:00
# Logic
ID = []
time = []
for idx, row in data.iterrows():
    tm = row['time']
    split = pd.date_range(
                tm - pd.DateOffset(hours=1), 
                tm + pd.DateOffset(hours=2), 
                freq="1min"
                )

    val = [row['ID']] * len(split)
    ID.extend(val)
    time.extend(split)
# Result
df = pd.DataFrame({"ID": ID, "time": time})
print(df.head(20))
     ID                time
0   ID1 2017-09-17 14:30:00
1   ID1 2017-09-17 14:31:00
2   ID1 2017-09-17 14:32:00
3   ID1 2017-09-17 14:33:00
4   ID1 2017-09-17 14:34:00
5   ID1 2017-09-17 14:35:00
.
.
.
1
skillsmuggler 30 Май 2019 в 18:47

Вы можете установить time в индекс и reindex:

df.time = pd.to_datetime(df.time)
df.set_index('time', inplace=True)

new_index = pd.concat(pd.date_range(end=a,freq='T', periods=61)
                        .to_series() for a in df.index)

new_df = df.reindex(new_index).bfill().reset_index()

Выход (new_df.head()):

                  index       ID
0   2017-09-17 14:30:00     12.0
1   2017-09-17 14:31:00     12.0
2   2017-09-17 14:32:00     12.0
3   2017-09-17 14:33:00     12.0
4   2017-09-17 14:34:00     12.0
0
Quang Hoang 30 Май 2019 в 18:48
56383619