рассчитать продолжительность события панды - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь следовать этому первому ответу этого сообщения SO для расчета продолжительности события.Примером в посте является продолжительность дождя, и человек хочет знать суммирование количества осадков и продолжительность в часах события дождя.

Мой сценарий - это аналогичный временной ряд, но приложение - это насос, и яЯ хочу знать общую продолжительность в часах в день, когда насос работает.Мои данные - команда скорости насоса, и каждый раз, когда скорость насоса превышает 0,0, насос работает.

Для начала я читаю свой CSV-файл в Pandas.

#read CSV file
df = pd.read_csv('C:\\Users\\desktop\\data.csv', index_col='Date', parse_dates=True)

# Converting the index as date
df.index = pd.to_datetime(df.index)

df

За исключением того, что я столкнулся с проблемой при попытке преобразовать мой индекс Date в дату и время.Это возвращает ValueError: day is out of range for month

Кто-нибудь знает исправление для этого?В конечном итоге это код, который я пытаюсь воссоздать из первого поста ответа SO, где автор создает столбцы справки ...

# create helper columns defining contiguous blocks and day
df['block'] = (df['Pump4VFD'].astype(bool).shift() != df['Pump4VFD'].astype(bool)).cumsum()
df['day'] = df.index.dt.normalize()

# group by day to get unique block count and value count
session_map = df[df['value'].astype(bool)].groupby('day')['block'].nunique()
hour_map = df[df['value'].astype(bool)].groupby('day')['value'].count()

# map to original dataframe
df['sessions'] = df['day'].map(session_map)
df['hours'] = df['day'].map(hour_map)

# calculate result
res = df.groupby(['day', 'hours', 'sessions'], as_index=False)['value'].sum()
res['duration'] = res['hours'] / res['sessions']
res['amount'] = res['value'] / res['sessions']

Мои данные выглядят так:

                    Pump4VFD
Date                                                                    
1/0/00 12:45 AM          0.0
1/0/00 12:50 AM          0.0
1/0/00 12:55 AM          0.0
1/0/00 12:00 AM          0.0
1/0/00 1:05 AM           0.0

1 Ответ

0 голосов
/ 27 февраля 2019

Возможно, вы захотите добавить dayfirst = True к pd.to_datetime

df.index = pd.to_datetime(df.index,dayfirst=True)

Это может быть одним из способов, но если это не сработает, попробуйте следующее дополнение:

df.index = pd.to_datetime(df.index,dayfirst=True,infer_datetime_format=True)

Если вам нужны дополнительные разъяснения, попробуйте этот пост: ValueError: день выходит за пределы диапазона для месяца

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