2016-08-17 5 views
1

Я имеющих временные ряды в виде DataFrame, что я могу groupby к сериивременных рядов Binning с пандами

pan.groupby(pan.Time).mean() 

, который имеет только две колонки Time и Value:

Time    Value 
2015-04-24 06:38:49 0.023844 
2015-04-24 06:39:19 0.019075 
2015-04-24 06:43:49 0.023844 
2015-04-24 06:44:18 0.019075 
2015-04-24 06:44:48 0.023844 
2015-04-24 06:45:18 0.019075 
2015-04-24 06:47:48 0.023844 
2015-04-24 06:48:18 0.019075 
2015-04-24 06:50:48 0.023844 
2015-04-24 06:51:18 0.019075 
2015-04-24 06:51:48 0.023844 
2015-04-24 06:52:18 0.019075 
2015-04-24 06:52:48 0.023844 
2015-04-24 06:53:48 0.019075 
2015-04-24 06:55:18 0.023844 
2015-04-24 07:00:47 0.019075 
2015-04-24 07:01:17 0.023844 
2015-04-24 07:01:47 0.019075 

То, что я пытаюсь сделать, - это выяснить, как я могу объединить эти значения в частоту дискретизации, например 30 секунд и усредняют эти бункеры с более чем одним наблюдением.

На последнем этапе мне нужно будет интерполировать эти значения, но я уверен, что есть что-то, что я могу использовать.

Однако я просто не могу понять, как это сделать и усреднение этих значений. Time является объектом datetime.datetime, а не str.

Я пробовал разные вещи, но ничего не работает. Исключения летают.

Кто-нибудь, кто получил это?

+1

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling –

ответ

1

IIUC, вы могли бы использовать TimeGrouper вместе с groupby на уровне индекса для расчета средних значений для Value колонки, как показано на рисунке:

df.set_index('Time', inplace=True) 
# Taking mean values for a frequency of 2 minutes 
df_group = df.groupby(pd.TimeGrouper(level='Time', freq='2T'))['Value'].agg('mean') 
df_group.dropna(inplace=True) 
df_group = df_group.to_frame().reset_index() 
print(df_group) 

       Time  Value 
0 2015-04-24 06:38:00 0.021459 
1 2015-04-24 06:42:00 0.023844 
2 2015-04-24 06:44:00 0.020665 
3 2015-04-24 06:46:00 0.023844 
4 2015-04-24 06:48:00 0.019075 
5 2015-04-24 06:50:00 0.022254 
6 2015-04-24 06:52:00 0.020665 
7 2015-04-24 06:54:00 0.023844 
8 2015-04-24 07:00:00 0.020665 

Вы также можете использовать resample как указывает @Paul Н, довольно для этой ситуации.

print(df.set_index('Time').resample('2T').mean().dropna().reset_index()) 

       Time  Value 
0 2015-04-24 06:38:00 0.021459 
1 2015-04-24 06:42:00 0.023844 
2 2015-04-24 06:44:00 0.020665 
3 2015-04-24 06:46:00 0.023844 
4 2015-04-24 06:48:00 0.019075 
5 2015-04-24 06:50:00 0.022254 
6 2015-04-24 06:52:00 0.020665 
7 2015-04-24 06:54:00 0.023844 
8 2015-04-24 07:00:00 0.020665 
+1

это Предусматривает ли другой результат, чем более прямой 'resample' метод? http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling –

+0

Я просто попробовал. Это дает тот же результат, что и предыдущий. –

+0

Удивительный! Спасибо вам, ребята (@PaulH) – displayname

Смежные вопросы