Итерация по метке времени в Python - PullRequest
0 голосов
/ 14 ноября 2018

Часть кадра данных панд приведена ниже:

 timestamp             quantity price Dates     Time     store_price
 2016-07-01 09:15:55    750 1237.50 2016-07-01  09:15:55    nan
 2016-07-01 09:16:01    750 1237.35 2016-07-01  09:16:01    nan     
 2016-07-01 09:16:46    750 1238.15 2016-07-01  09:16:46    nan 
 2016-07-01 09:16:46    750 1238.00 2016-07-01  09:16:46    nan 
 2016-07-01 09:18:12    750 1239.70 2016-07-01  09:18:12    nan 
 2016-07-01 09:19:05    1500 1237.45 2016-07-01 09:19:05    nan 
 2016-07-01 09:19:58    750 1234.70 2016-07-01  09:19:58    nan 
 2016-07-01 09:20:02    750 1234.95 2016-07-01  09:20:02    nan
 2016-07-01 09:20:04    750 1234.00 2016-07-01  09:20:04    nan 
 2016-07-01 09:20:28    750 1237.25 2016-07-01  09:20:28    nan
 2016-07-01 09:21:18    750 1238.30 2016-07-01  09:21:18    nan
 2016-07-01 09:22:29    750 1237.55 2016-07-01  09:22:29    nan
 2016-07-01 09:22:51    750 1237.50 2016-07-01  09:22:51    nan
 2016-07-01 09:23:25    750 1237.05 2016-07-01  09:23:25    nan
 2016-07-01 09:23:28    750 1237.00 2016-07-01  09:23:28    nan
 2016-07-01 09:24:19    750 1237.05 2016-07-01  09:24:19    nan
 2016-07-01 09:24:19    2250 1237.00 2016-07-01 09:24:19    nan
 2016-07-01 09:24:25    750 1237.00 2016-07-01  09:24:25    nan
 2016-07-01 09:25:23    750 1236.05 2016-07-01  09:25:23    nan 
 2016-07-01 09:26:10    750 1237.00 2016-07-01  09:26:10    nan
 2016-07-01 09:26:18    750 1237.90 2016-07-01  09:26:18    nan
 2016-07-01 09:26:25    750 1237.05 2016-07-01  09:26:25    nan     
 2016-07-01 09:27:54    750 1233.50 2016-07-01  09:27:54    nan 
 2016-07-01 09:28:25    750 1233.85 2016-07-01  09:28:25    nan
 2016-07-01 09:29:17    750 1234.85 2016-07-01  09:29:17    nan
 2016-07-01 09:29:36    750 1235.45 2016-07-01  09:29:36    nan
 2016-07-01 09:29:54    750 1235.00 2016-07-01  09:29:54    nan
 2016-07-01 09:30:06    750 1236.65 2016-07-01  09:30:06    nan 
 2016-07-01 09:30:36    750 1236.60 2016-07-01  09:30:36    nan
 2016-07-01 09:31:01    750 1236.60 2016-07-01  09:31:01    nan
 2016-07-01 09:31:09    750 1236.70 2016-07-01  09:31:09    nan
 2016-07-01 09:31:15    750 1237.00 2016-07-01  09:31:15    nan

Я хочу получить фрейм данных, как показано ниже, т. Е. Сохранить значение price в другом столбце store_price для строк в диапазоне времени с 09.20.00 до 09.30.00:

 timestamp             quantity price Dates     Time     store_price
 2016-07-01 09:15:55    750 1237.50 2016-07-01  09:15:55    nan
 2016-07-01 09:16:01    750 1237.35 2016-07-01  09:16:01    nan     
 2016-07-01 09:16:46    750 1238.15 2016-07-01  09:16:46    nan 
 2016-07-01 09:16:46    750 1238.00 2016-07-01  09:16:46    nan 
 2016-07-01 09:18:12    750 1239.70 2016-07-01  09:18:12    nan 
 2016-07-01 09:19:05    1500 1237.45 2016-07-01 09:19:05    nan 
 2016-07-01 09:19:58    750 1234.70 2016-07-01  09:19:58    nan 
 2016-07-01 09:20:02    750 1234.95 2016-07-01  09:20:02    1234.95
 2016-07-01 09:20:04    750 1234.00 2016-07-01  09:20:04    1234.00     
 2016-07-01 09:20:28    750 1237.25 2016-07-01  09:20:28    1237.25
 2016-07-01 09:21:18    750 1238.30 2016-07-01  09:21:18    1238.30
 2016-07-01 09:22:29    750 1237.55 2016-07-01  09:22:29    1237.55
 2016-07-01 09:22:51    750 1237.50 2016-07-01  09:22:51    1237.50 
 2016-07-01 09:23:25    750 1237.05 2016-07-01  09:23:25    1237.05
 2016-07-01 09:23:28    750 1237.00 2016-07-01  09:23:28    1237.00
 2016-07-01 09:24:19    750 1237.05 2016-07-01  09:24:19    1237.05
 2016-07-01 09:24:19    2250 1237.00 2016-07-01 09:24:19    1237.00
 2016-07-01 09:24:25    750 1237.00 2016-07-01  09:24:25    1237.00
 2016-07-01 09:25:23    750 1236.05 2016-07-01  09:25:23    1236.05 
 2016-07-01 09:26:10    750 1237.00 2016-07-01  09:26:10    1237.00
 2016-07-01 09:26:18    750 1237.90 2016-07-01  09:26:18    1237.90
 2016-07-01 09:26:25    750 1237.05 2016-07-01  09:26:25    1237.05     
 2016-07-01 09:27:54    750 1233.50 2016-07-01  09:27:54    1233.50 
 2016-07-01 09:28:25    750 1233.85 2016-07-01  09:28:25    1233.85
 2016-07-01 09:29:17    750 1234.85 2016-07-01  09:29:17    1234.85
 2016-07-01 09:29:36    750 1235.45 2016-07-01  09:29:36    1235.45
 2016-07-01 09:29:54    750 1235.00 2016-07-01  09:29:54    1235.00
 2016-07-01 09:30:06    750 1236.65 2016-07-01  09:30:06    nan 
 2016-07-01 09:30:36    750 1236.60 2016-07-01  09:30:36    nan
 2016-07-01 09:31:01    750 1236.60 2016-07-01  09:31:01    nan
 2016-07-01 09:31:09    750 1236.70 2016-07-01  09:31:09    nan
 2016-07-01 09:31:15    750 1237.00 2016-07-01  09:31:15    nan

1 Ответ

0 голосов
/ 23 ноября 2018

Решение

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"]

Получение желаемых результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...