Fusionar con el minuto más cercano usando Pandas -- python campo con pandas campo con dataframe camp Relacionados El problema

Merge with the nearest minute using pandas


0
vote

problema

Español

Simplemente quiero fusionar dos cuadros de datos dentro de ± 1 min.

AQUÍ NAME_DF con el conjunto de datos de muestra:

  Name    Date A       2/19/2019 17:16:15 B       2/19/2019 17:19:46 C       2/19/2019 17:23:03   

OTRO DATAFAME JOB_DF:

  Job         Datestamp Engineer    2/19/2019  17:15:56  Dancer      2/19/2019  17:19:27  Singer      2/19/2019  17:22:44    

Aquí es lo que intenté implementar, pero este método pierde algunas filas que pasaron por el otro lado de los 1 minuto (e.g & lt; 30 segundos de rondas, & gt; 30 rondas arriba):

  name_df['Date&Time'] = name_df['Date&Time'].dt.round('1min') job_df['Date&Time'] = job_df['Date&Time'].dt.round('1min')  merged_df = pd.merge(name_df, job_df, on='Date&Time')   

¡Cualquier ayuda en esto es muy apreciada!

Original en ingles

I simply want to merge two dataframes within ±1 min interval.

Here name_df with the sample data set:

Name    Date A       2/19/2019 17:16:15 B       2/19/2019 17:19:46 C       2/19/2019 17:23:03 

Another dateframe job_df:

Job         Datestamp Engineer    2/19/2019  17:15:56  Dancer      2/19/2019  17:19:27  Singer      2/19/2019  17:22:44  

Here is what I tried to implement but this method misses some rows that went over the other side of the 1 minute(e.g <30 sec rounds down, >30 rounds up):

name_df['Date&Time'] = name_df['Date&Time'].dt.round('1min') job_df['Date&Time'] = job_df['Date&Time'].dt.round('1min')  merged_df = pd.merge(name_df, job_df, on='Date&Time') 

Any help on this is greatly appreciated!

</div
        
   
   

Lista de respuestas

0
 
vote

Aquí hay un método potencial para lograr lo que describe:

  1. Crear un nuevo marco de datos (por ejemplo, TIME_DF) que contiene la fecha y las marcas de tiempo de name_df y job_df
  2. Sort Time_DF en orden ascendente
  3. Cree una columna adicional en TIME_DF para especificar un número de grupo único para cada conjunto de fecha y marcas de tiempo que se encuentren en un minuto entre sí
  4. Poja esta nueva columna calculando la diferencia en segundos entre la primera fecha y la marca de tiempo y los que, después de él, dándole a cada uno de ellos el mismo número de grupo único, siempre que la diferencia sea de 120 segundos o menos.
  5. Una vez que la diferencia es mayor que 120 segundos, incremente el número de grupo y repita el proceso con la siguiente fila no agrupada.
  6. Después de asignar todas las filas un número de grupo, fusionar TIME_DF de nuevo en Name_DF y JOB_DF en la columna Fecha TimeStamp, manteniendo solo los datos que coinciden con cada marco de datos original, respectivamente
  7. Finalmente, realice una combinación con la columna Número de grupo de cada uno de los dos cuadros de datos

En última instancia, si desea agruparlos dentro de un intervalo de +/- 1 minuto, puede hacerlo en más de una forma, dependiendo de si comienza al principio o la fecha y la hora de finalización. Si tiene una serie de tiempos de aumento sucesivamente que están separados de menos de 120 segundos, podrían agruparlos juntos en paréntesis de +/- 1 minuto de múltiples maneras. El método anterior le permitiría hacerlo sistemáticamente de manera sistemática de una manera que evitaría el problema que usted describe, pero en última instancia puede ser imposible evitarlo por completo.

Con lo que se dice, podría ser más fácil probar un método de redondeo diferente, como NP.Floor o NP.CEIL o su equivalente. Parece algo arbitrario para decidir cuándo redondear o cuándo redondear caso por caso. Finalmente, una vez que haya determinado que hay dos sellos de tiempo en un minuto entre sí, es posible que deba decidir qué sello de tiempo asociarse con ellos ambos. Tal vez usando el tiempo promedio podría ser una buena solución.

 

Here is a potential method to accomplish what you describe:

  1. Create a new data frame (e.g. time_df) that contains the date and timestamps from name_df and job_df
  2. Sort time_df in ascending order
  3. Create an additional column in time_df to specify a unique group number for each set of date and timestamps that are within a minute of each other
  4. Populate this new column by computing the difference in seconds between the first date and timestamp and the ones after it, giving each of them the same unique group number as long as the difference is 120 seconds or less.
  5. Once the difference is greater than 120 seconds, increment the group number and repeat the process with the next un-grouped row.
  6. After assigning all of the rows a group number, merge time_df back into name_df and job_df on the date timestamp column, keeping only the data that matches each original data frame, respectively
  7. Finally, perform a merge using the group number column from each of the two data frames

Ultimately, if you want to group them within a +/- 1 minute interval, you can do it in more than one way depending on whether you start at the beginning or ending date and time. If you have a series of successively increasing times that are each less than 120 seconds apart, you could group them together into brackets of +/- 1 minute in multiple ways. The above method would allow you to do it systematically in a way that would prevent some of the problem you describe, but it may ultimately be impossible to avoid it altogether.

With that being said, it might be easier to try out a different rounding method, such as np.floor or np.ceil or their equivalent. It seems somewhat arbitrary to decide when to round up or when to round down on a case-by-case basis. Finally, once you have determined two time-stamps are within a minute of each other, you may need to decide what time-stamp to associate with them both. Perhaps using the average time could be a good solution.

</div
 
 

Relacionados problema

1  R - Quiero que el nombre de la línea de datos sea determinada por un argumento de línea de comandos  ( R i want data frame name to be determined by a command line argument ) 
Quiero que se determine un nombre de marco de datos por un argumento de línea de comandos. Lo siguiente debería dejarlo claro lo que estaba tratando de hacer ...

1  Pandas DataFrame al diccionario con tuplas como clave y valores  ( Pandas dataframe to dictionary with tuples as key and values ) 
Necesito ayuda para hacer lo siguiente: Tengo un archivo CSV como lo siguiente, cargado en un Frame 'DF'. Hay varias regiones, diferentes valores para la me...

2  Cambiar filas en pandas  ( Change rows in pandas ) 
Tengo una matriz en marco de datos de Pandas print dfMatrix 0 1 2 3 4 0 10000 10 8 11 10 1 10 100000 ...

0  Fusionar con el minuto más cercano usando Pandas  ( Merge with the nearest minute using pandas ) 
Simplemente quiero fusionar dos cuadros de datos dentro de ± 1 min. AQUÍ NAME_DF con el conjunto de datos de muestra: Name Date A 2/19/2019 17:1...

1  Filtrando cada columna de un marco de datos un PUT NA para valores inigualables  ( Filtering each column of a data frame an put na for unmatched values ) 
Tengo una tabla de la siguiente manera: [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 0.02 [3,] ...

96  Cómo explotar una lista dentro de una celda de datos de datos en filas separadas  ( How to explode a list inside a dataframe cell into separate rows ) 
Estoy buscando convertir una célula PANDAS que contiene una lista en filas para cada uno de esos valores. Entonces, toma esto: Si me gustaría desempaca...

1  ¿Puedes usar Pandas Groupby para agrupar filas, determinado sumando un valor de columna?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
Me gustaría agrupar filas en un contexto de datos por valores de una columna. El ejemplo dado a continuación sería si estuviera agrupando los valores de 'Numb...

4  Usando RBIND () para combinar múltiples marcos de datos en uno de los datos más grandes.Frame dentro de LAPLY ()  ( Using rbind to combine multiple data frames into one larger data frame within ) 
Estoy usando R-Studio 0.99.491 y R versión 3.2.3 (2015-12-10). Soy un relative Newbie a R, y apreciaría algo de ayuda. Estoy haciendo un proyecto donde estoy ...

12  Deshacerse de las filas con atributos duplicados en r  ( Get rid of rows with duplicate attributes in r ) 
Tengo un gran contorno de datos con columnas tales como: ID, time, OS, IP Cada fila de ese flujo de datos corresponde a una entrada. Dentro de ese prot...

1  Cambio de entradas en un fotograma de datos dependiendo de si están entre dos valores o por debajo de un valor  ( Changing entries in a dataframe depending on whether they are between two values ) 
Tengo un conteo de datos con la distancia en una columna y puntuaciones en otra columna, por ejemplo. Distance Scores 1000. 1 1500. 1 etc. Teng...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos