Cómo volver a muestrear los datos de pandas con datos discretos?

votos
1

Estoy atascado con los pandas. Mi idea es volver a muestrear los datos que se expresan por factores. Por ejemplo, he observado dos gatos llamados Charles y Valentine. Como animales están expresando el comportamiento para tiempos más largos, las observaciones se realizan cuando cambia el comportamiento actual. Quiero volver a muestrear para obtener datos minuto a gota

name;timestamp;activity
Charles;10.10.18 12:31;drinks
Charles;10.10.18 12:51;sleep
Charles;10.10.18 13:01;mouse
Valentine;10.10.18 12:31;drinks
Valentine;10.10.18 12:51;sleep
Valentine;10.10.18 13:01;purr

Mi salida deseada debe tener este aspecto:

name    timestamp   activity
Charles 10.10.18 12:31  drinks
Charles 10.10.18 12:32  drinks
Charles 10.10.18 12:33  drinks
Charles 10.10.18 12:34  drinks
Charles 10.10.18 12:35  drinks
Charles 10.10.18 12:36  drinks
Charles 10.10.18 12:37  drinks
Charles 10.10.18 12:38  drinks
Charles 10.10.18 12:39  drinks
Charles 10.10.18 12:40  drinks
Charles 10.10.18 12:41  drinks
Charles 10.10.18 12:42  drinks
Charles 10.10.18 12:43  drinks
Charles 10.10.18 12:44  drinks
Charles 10.10.18 12:45  drinks
Charles 10.10.18 12:46  drinks
Charles 10.10.18 12:47  drinks
Charles 10.10.18 12:48  drinks
Charles 10.10.18 12:49  drinks
Charles 10.10.18 12:50  drinks
Charles 10.10.18 12:51  sleeps
Charles 10.10.18 12:52  sleeps
Charles 10.10.18 12:53  sleeps
Charles 10.10.18 12:54  sleeps
Charles 10.10.18 12:55  sleeps
Charles 10.10.18 12:56  sleeps
Charles 10.10.18 12:57  sleeps
Charles 10.10.18 12:58  sleeps
Charles 10.10.18 12:59  sleeps
Charles 10.10.18 13:00  sleeps
Charles 10.10.18 13:01  mouse
Valentine   10.10.18 12:31  drinks
Valentine   10.10.18 12:32  drinks
Valentine   10.10.18 12:33  drinks
Valentine   10.10.18 12:34  drinks
Valentine   10.10.18 12:35  drinks
Valentine   10.10.18 12:36  drinks
Valentine   10.10.18 12:37  drinks
Valentine   10.10.18 12:38  drinks
Valentine   10.10.18 12:39  drinks
Valentine   10.10.18 12:40  drinks
Valentine   10.10.18 12:41  drinks
Valentine   10.10.18 12:42  drinks
Valentine   10.10.18 12:43  drinks
Valentine   10.10.18 12:44  drinks
Valentine   10.10.18 12:45  drinks
Valentine   10.10.18 12:46  drinks
Valentine   10.10.18 12:47  drinks
Valentine   10.10.18 12:48  drinks
Valentine   10.10.18 12:49  drinks
Valentine   10.10.18 12:50  drinks
Valentine   10.10.18 12:51  sleeps
Valentine   10.10.18 12:52  sleeps
Valentine   10.10.18 12:53  sleeps
Valentine   10.10.18 12:54  sleeps
Valentine   10.10.18 12:55  sleeps
Valentine   10.10.18 12:56  sleeps
Valentine   10.10.18 12:57  sleeps
Valentine   10.10.18 12:58  sleeps
Valentine   10.10.18 12:59  sleeps
Valentine   10.10.18 13:00  sleeps
Valentine   10.10.18 13:01  purr

Utilizando

data.resample('60S').pad() 

no funcionó como pandas afirma que las marcas de tiempo no son únicos.

subconjuntos de datos para un gato por tiempo no ayuda mucho.

Publicado el 20/10/2018 a las 10:41
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Usted está definitivamente en el camino correcto con pad. Las únicas cosas a destacar son los siguientes:

  • Con el fin de volver a muestrear una serie de tiempo, necesita que su índice de trama de datos que consisten en los tiempos que ser re-muestreada.
  • Siempre que necesite para dividir los datos para que cada nombre es tratado de forma diferente, groupbyes su amigo.
  • Cuando se realiza una acción en un grupo, la serie de tiempo resultante tiene como (parte de) su índice de la columna utilizada para la agrupación, de manera alguna combinación de reset_index, set_index, unstack, y stacktípicamente puede ser utilizado para masajear el resultado en su forma deseada (pero si no les importa la salida es ligeramente diferente de su salida deseada, es probable que usted puede omitir esta parte).

Como tal, se puede dejar

df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index()

En la práctica:

In [54]: df

Out[54]:
        name           timestamp activity
0    Charles 2018-10-10 12:31:00   drinks
1    Charles 2018-10-10 12:51:00    sleep
2    Charles 2018-10-10 13:01:00    mouse
3  Valentine 2018-10-10 12:31:00   drinks
4  Valentine 2018-10-10 12:51:00    sleep
5  Valentine 2018-10-10 13:01:00     purr

In [91]: df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index().head()
Out[91]:
      name           timestamp activity
0  Charles 2018-10-10 12:31:00   drinks
1  Charles 2018-10-10 12:32:00   drinks
2  Charles 2018-10-10 12:33:00   drinks
3  Charles 2018-10-10 12:34:00   drinks
4  Charles 2018-10-10 12:35:00   drinks
Respondida el 20/10/2018 a las 13:51
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more