#python #pandas #average #minute #pandas-groupby
#python #pandas #среднее #минута #pandas-groupby
Вопрос:
Итак, у меня есть фрейм данных pandas с именем ‘df’, и я хочу удалить секунды и просто иметь индекс в формате ГГГГ-ММ-ДД ЧЧ: ММ. Но затем также группируются минуты и отображается среднее значение за эту минуту.
Итак, я хочу превратить этот фрейм данных
value
2015-05-03 00:00:00 61.0
2015-05-03 00:00:10 60.0
2015-05-03 00:00:25 60.0
2015-05-03 00:00:30 61.0
2015-05-03 00:00:45 61.0
2015-05-03 00:01:00 61.0
2015-05-03 00:01:10 60.0
2015-05-03 00:01:25 60.0
2015-05-03 00:01:30 61.0
2015-05-03 00:01:45 61.0
2015-05-03 00:02:00 61.0
2015-05-03 00:02:10 60.0
2015-05-03 00:02:25 60.0
2015-05-03 00:02:40 60.0
2015-05-03 00:02:55 60.0
2015-05-03 00:03:00 59.0
2015-05-03 00:03:15 59.0
2015-05-03 00:03:20 59.0
2015-05-03 00:03:35 59.0
2015-05-03 00:03:40 60.0
в этот фрейм данных
value
2015-05-03 00:00 60.6
2015-05-03 00:01 60.6
2015-05-03 00:02 60.2
2015-05-03 00:03 59.2
я пробовал код, подобный
df['value'].resample('1Min').mean()
или
df.index.resample('1Min').mean()
но, похоже, это не работает. Есть идеи?
Комментарии:
1. Для меня это работает отлично. Вы получаете какую-то ошибку?
2. df.index.resample(‘1Min’).mean() выдает ошибку AttributeError: объект ‘DatetimeIndex’ не имеет атрибута ‘resample’, а df[‘value’].resample(‘1Min’).mean() не выдает ошибку, но и не дает желаемого результата, ничего не меняется, я не получаю средних значений, а секунды все еще там
Ответ №1:
Сначала вам нужно преобразовать индекс в DatetimeIndex
:
df.index = pd.DatetimeIndex(df.index)
#another solution
#df.index = pd.to_datetime(df.index)
print (df['value'].resample('1Min').mean())
#another same solution
#print (df.resample('1Min')['value'].mean())
2015-05-03 00:00:00 60.6
2015-05-03 00:01:00 60.6
2015-05-03 00:02:00 60.2
2015-05-03 00:03:00 59.2
Freq: T, Name: value, dtype: float64
Другое решение с установлением значений секунд в индексе на 0
by astype
:
print (df.groupby([df.index.values.astype('<M8[m]')])['value'].mean())
2015-05-03 00:00:00 60.6
2015-05-03 00:01:00 60.6
2015-05-03 00:02:00 60.2
2015-05-03 00:03:00 59.2
Name: value, dtype: float64
Комментарии:
1. У меня уже есть df.index = df.index.to_datetime() в моем коде, разве это не преобразуется в datetimeindex?
2. Вы пытаетесь
df.index = pd.to_datetime(df.index)
?3. итак, код, который я действительно хотел, был df = df[‘value’].повторная выборка (‘1Min’).mean(), спасибо, примет ваш ответ через 4 минуты!
4. Рад, что могу вам помочь.
df.resample('1Min')['value'].mean()
то же самоеdf['value'].resample('1Min').mean()
, что я добавляю его в ответ.5. @ak3191 — Я думаю, для построения графика это не обязательно, используйте
s = df.groupby([df.index.values.astype('<M8[m]')])['value'].mean()
иs.plot()
. Но если хотитеDataFrame
использоватьrint (df.groupby([df.index.values.astype('<M8[m]')])['value'].mean().reset_index())