Решение
df['timestamp'] = pd.to_datetime(df['timestamp']) # Only if needed
condition = (df['timestamp'].dt.hour == 9) & (df['timestamp'].dt.minute >= 20) & (df['timestamp'].dt.minute <= 30)
df.loc[condition, "store_price"] = df.loc[condition, "price"]
Пояснение
Сначала убедитесь, что столбец timestamp
имеет время datetime
:
df['timestamp'].dtypes
Если возвращается dtype('O')
вам нужно привести его к datetime, используя pd.to_datetime , как показано ниже:
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['timestamp'].dtypes
>>> dtype('<M8[ns]')
Теперь вы можете получить доступ к часам и минутам столбца с помощью .dt и введите маску, как показано ниже:
condition = (df['timestamp'].dt.hour == 9) & (df['timestamp'].dt.minute >= 20) & (df['timestamp'].dt.minute <= 30)
Наконец, вы можете переопределить столбец store_price
с помощью price
только для строк, которые соответствуют условию, используя .loc :
df.loc[condition, "store_price"] = df.loc[condition, "price"]
Получение желаемых результатов.