Генерировать смещения для каждой строки в фрейме данных до и после значения даты и времени

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

    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
...

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

Вы смотрели на pandas.pydata.org/pandas-docs/stable/reference/api/… ?

iamchoosinganame 30.05.2019 20:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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
.
.
.

Это совершенные навыки контрабандиста. Ты получил это. Спасибо

Douy789 30.05.2019 21:29

Вы можете установить 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

Не совсем то, что я искал, потому что даты не следуют никаким правилам.

Douy789 30.05.2019 21:31

Другие вопросы по теме