Пересмотрите дату начала datetimeIndex неправильно - PullRequest
0 голосов
/ 31 октября 2018

Источник:

    import pandas as pd
    import numpy as np

    cols = ['Date', 'Time', 'Load', 'Battery', 'Panel',
           'Wind', 'Temp', 'Humidity', 'Volt']
    data = pd.read_csv('test.csv',delimiter=';',header=0,names=cols,
                        decimal=',',parse_dates[[0,1]],
                        infer_datetime_format=True)
    data.set_index('Date_Time',inplace=True)

У меня есть этот фрейм данных:

In [126]: data.head()                                                                          
Out[126]: 
                     Load  Battery  Panel  Wind   Temp  Humidity  Volt
Date_Time                                                             
2018-07-31 13:07:15  13.3    326.3  353.1  0.98  33.93     21.92  3.89
2018-07-31 13:08:15  14.0    314.4  342.5  0.59  33.88     21.84  3.88
2018-07-31 13:09:16  13.4    309.6  335.5  0.39  33.84     22.14  3.88
2018-07-31 13:10:16  13.8    285.1  313.8  2.55  33.71     23.18  3.88
2018-07-31 13:11:16  13.6    292.9  314.7  2.03  33.62     23.25  3.88
......

с другими 93000 строками. с 2018-07-31 по 2018-04-10. Я хотел бы повторить выборку, взяв сумму значений для каждого 10-минутного кадра. Итак, я попробовал:

In [127]: data.resample('10min',closed='left',label='left').sum()                              
Out[127]: 
                      Load  Battery  Panel   Wind    Temp  Humidity   Volt
Date_Time                                                                 
2018-01-08 00:00:00  136.9   -140.6   -2.9  19.06  291.27    245.63  39.45
2018-01-08 00:10:00  137.3   -140.7   -3.1  15.14  290.62    244.88  39.42
2018-01-08 00:20:00  137.4   -140.4   -2.3  18.03  288.61    246.44  39.44
2018-01-08 00:30:00  137.5   -140.4   -2.2  12.61  286.97    246.83  39.43

Это близко к тому, что я ожидал, но «повторная выборка» удаляет все данные с первого дня (я подозреваю, может быть, потому что серия не начинается в полночь), каков правильный способ сделать повторную выборку? Есть две проблемы:

  1. В результате пропущен первый день, т. Е. Все данные удалены, а пересчитанный кадр данных начинается первого августа, а не 07/31.

  2. Можно считать интервалы, которые начинаются в полночь, и они таковы, что они кратны 10 минутам (так что, хорошо для 00:00, 10:00, 20:00), но тогда я ожидаю, что первая группировка будет :


2018-07-31 13:07:15  13.3    326.3  353.1  0.98  33.93     21.92  3.89
2018-07-31 13:08:15  14.0    314.4  342.5  0.59  33.88     21.84  3.88
2018-07-31 13:09:16  13.4    309.6  335.5  0.39  33.84     22.14  3.88

а затем с 13:10:16, конечно, в первый день набора данных, а не во второй. Хорошо. Я решил это с помощью:

x = data['2018-07-31'].resample('10min').sum()
y = data.resample('10min',closed='left',label='left').sum()
r = pd.concat([x,y])  

но я думаю, что это должна быть ошибка в повторной выборке.

1 Ответ

0 голосов
/ 31 октября 2018

Для вывода, который начинается ровно в 2018-07-31 13:07:15, вам необходимо добавить в аргумент base: «источник агрегированных интервалов»: документация .

Пример кода:

start = pd.to_datetime('2018-07-31 13:07:15', format='%Y-%m-%d %H:%M:%S')

minutes = pd.date_range(start, start + timedelta(10), freq='min')

df = pd.DataFrame({'Date_Time': minutes, 'Load': np.random.randint(13, size=len(minutes))})

df.set_index('Date_Time', inplace=True)

df.resample('10min', closed='left', label='left', base=7.25).sum()

Результат:

Date_Time           Load       
2018-07-31 13:07:15 11
2018-07-31 13:17:15 1
2018-07-31 13:27:15 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...