/ / Dividir un marco de datos en múltiples marcos de datos de 5 segundos y obtener el recuento en Python: python, pandas, datetime, split, group-by

División de un marco de datos en múltiples marcos de datos de 5 segundos y obtención del recuento en Python: python, pandas, datetime, split, group-by

Tengo un conjunto de datos relativamente grande que quiero dividir en múltiples marcos de datos en Pitón basado en una columna que contiene un objeto de fecha y hora. Los valores en la columna (por los que quiero dividir el marco de datos) se dan en el siguiente formato:

  1. 2015-11-01 00:00:05

Puede asumir que el marco de datos se ve así.

Cómo puedo dividir el marco de datos en intervalos de 5 segundos de la siguiente manera:

  1. 1er marco de datos 2015-11-01 00:00:00 - 2015-11-01 00:00:05,

  2. 2do marco de datos 2015-11-01 00:00:05 - 2015-11-01 00:00:10, y así.

También necesito contar el número de observaciones en cada uno de los marcos de datos resultantes. En otras palabras, sería bueno si pudiera obtener otro marco de datos con 2 columnas (El formato de salida deseado se puede encontrar a continuación):

enter image description here

  • 1ª columna representa el grupo dividido (valoresde esta columna no importa: podrían ser simplemente 1, 2, 3, .. indicando el orden de los intervalos de 5 segundos, por ejemplo, 1 podría referirse al período 2015-11-01 00:00:00 - 2015-11-01 00:00:05, 2 podría referirse al período 2015-11-01 00:00:05 - 2015-11-01 00:00:10 y así),
  • La segunda columna muestra el número de observaciones que caen en cada intervalo respectivo.

Respuestas

2 para la respuesta № 1

Crear dictionary of DataFramesy agrega una nueva columna con assign:

rng = pd.date_range("2015-11-01 00:00:00", periods=100, freq="S")
df = pd.DataFrame({"Date": rng, "a": range(100)})
print (df.head(10))
Date  a
0 2015-11-01 00:00:00  0
1 2015-11-01 00:00:01  1
2 2015-11-01 00:00:02  2
3 2015-11-01 00:00:03  3
4 2015-11-01 00:00:04  4
5 2015-11-01 00:00:05  5
6 2015-11-01 00:00:06  6
7 2015-11-01 00:00:07  7
8 2015-11-01 00:00:08  8
9 2015-11-01 00:00:09  9

g = df.groupby(pd.Grouper(key="Date", freq="5S"))

dfs = {k.strftime("%Y-%m-%d %H:%M:%S"):v.assign(A=range(1,len(v)+1), B=len(v)) for k,v in g}

print (dfs["2015-11-01 00:00:05"])
Date  a  A  B
5 2015-11-01 00:00:05  5  1  5
6 2015-11-01 00:00:06  6  2  5
7 2015-11-01 00:00:07  7  3  5
8 2015-11-01 00:00:08  8  4  5
9 2015-11-01 00:00:09  9  5  5

Si es necesario contar primero las filas agregadas. size y para Interval Se agrega 1 al índice:

df1 = df.groupby(pd.Grouper(key="Date", freq="5S")).size().reset_index(name="Count")
df1["Interval"] = df1.index + 1
print (df1.head())
Date  Count  Interval
0 2015-11-01 00:00:00      5         1
1 2015-11-01 00:00:05      5         2
2 2015-11-01 00:00:10      5         3
3 2015-11-01 00:00:15      5         4
4 2015-11-01 00:00:20      5         5