Python Pandas - не непрерывный временной ряд? - PullRequest
0 голосов
/ 15 декабря 2018

Есть ли в Пандах способ создать временной ряд, состоящий из выбранных часов для каждого дня периода?Например: давайте возьмем все дни 2018 года в качестве наших дат, а для времен (часов) 4 разных времени, например [09:00, 10:35, 14:00, 15:50].

Итак, мне нужен временной ряд, например:

2018-01-01 09:00
2018-01-01 10:35
2018-01-01 14:00
2018-01-01 15:50
2018-01-02 09:00
2018-01-02 10:35
2018-01-02 14:00
2018-01-02 15:50
2018-01-03 09:00
...

TIA, T

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Вы можете сделать что-то подобное, что будет намного быстрее, чем циклы:

1.) Создайте список дат:

In [34]: start_dt = '2018-01-01'
# For whole year, use periods=365
In [45]: days_list = pd.date_range(pd.to_datetime(start_dt), periods=3) 
In [59]: days_list = [i.date() for i in days_list] # Keeping only date part

2.) Создайте список раз:

In [38]: timelist = ['09:00', '10:35', '14:00', '15:50']

3.) Расширьте список, повторяя каждый элемент в days_list 4 раза, по одному на каждый раз:

In [60]: import numpy as np
In [61]: days_list = np.repeat(days_list, 4)

4.) Расширьте временной список, умножив его на уникальные даты в days_list, чтобы иметь одинаковую длину, имеет days_list:

Итак, поскольку мы использовали periods=3 при создании days_list.Таким образом, расширение временного списка на тот же коэффициент;

In [64]: timelist = timelist * 3

5.) Создание кадра данных:

In [65]: df = pd.DataFrame()
In [66]: df['Date'] = days_list
In [68]: df['time'] = timelist

Окончательный вывод:

In [78]: df
Out[78]: 
          Date   time
0   2018-01-01  09:00
1   2018-01-01  10:35
2   2018-01-01  14:00
3   2018-01-01  15:50
4   2018-01-02  09:00
5   2018-01-02  10:35
6   2018-01-02  14:00
7   2018-01-02  15:50
8   2018-01-03  09:00
9   2018-01-03  10:35
10  2018-01-03  14:00
11  2018-01-03  15:50
0 голосов
/ 15 декабря 2018

Попробуйте комбинацию панд date_range () и панд где () .

import pandas as pd
import numpy as np
import datetime

# Define times
times = ['00:00','09:00', '10:35', '14:00', '15:50']

# Define dates
start_date = '01.01.2018'
end_date = '31.12.2018'

# Create a list in minute resolution between start and end date
diff = pd.date_range(start_date,end_date,freq='T')

# Keep only the elements which match with the defined times in the list
filtered_hours = diff.where([mins in times for mins in diff.strftime('%H:%M')]).dropna()

print(filtered_hours)


DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 09:00:00',
               '2018-01-01 10:35:00', '2018-01-01 14:00:00',
               '2018-01-01 15:50:00', '2018-01-02 00:00:00',
               '2018-01-02 09:00:00', '2018-01-02 10:35:00',
               '2018-01-02 14:00:00', '2018-01-02 15:50:00',
               ...
               '2018-12-29 09:00:00', '2018-12-29 10:35:00',
               '2018-12-29 14:00:00', '2018-12-29 15:50:00',
               '2018-12-30 00:00:00', '2018-12-30 09:00:00',
               '2018-12-30 10:35:00', '2018-12-30 14:00:00',
               '2018-12-30 15:50:00', '2018-12-31 00:00:00'],
              dtype='datetime64[ns]', length=1821, freq='T')

Поместите его в серию с

# Put it into a Series

val = np.arange(0,len(filtered_hours))

Ser = pd.Series(val,index=filtered_hours)

print(Ser)



2018-01-01 00:00:00       0
2018-01-01 09:00:00       1
2018-01-01 10:35:00       2
2018-01-01 14:00:00       3
2018-01-01 15:50:00       4
2018-01-02 00:00:00       5
2018-01-02 09:00:00       6
2018-01-02 10:35:00       7
2018-01-02 14:00:00       8
2018-01-02 15:50:00       9
2018-01-03 00:00:00      10
2018-01-03 09:00:00      11
2018-01-03 10:35:00      12
2018-01-03 14:00:00      13
2018-01-03 15:50:00      14
2018-01-04 00:00:00      15
2018-01-04 09:00:00      16
2018-01-04 10:35:00      17
0 голосов
/ 15 декабря 2018
timelist = ['09:00', '10:35', '14:00', '15:50']
dayslist = []
for day in range(1, 366):
    for time in timelist:
        dayslist.append(str(day) + ' ' + time)

print(dayslist)

Вы должны иметь возможность импортировать время и проходить по нему, чтобы заменить дни на любую дату, какую вы пожелаете. Затем вы можете ввести свой список в Pandas DataFrame

import pandas as pd
df = pd.DataFrame({‘DateTime’: dayslist})
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...