La diferencia entre los elementos singulares de columnas ordenadas en un dataframe

0

Pregunta

Soy un poco nuevo en esto. Actualmente estoy experimentando con marcos de datos en python y estoy un poco atascado con algo. Necesito obtener las columnas en el marco de datos que tienen la misma diferencia entre sus únicos elementos ordenados. Yo soy capaz de hacerlo en un stand-alone código, pero quiero hacerlo de forma dinámica mediante la obtención de la trama de datos en un archivo.

import numpy as np
import pandas as pd

first = [20, 10, 40, 30, 10]
sec = [94, 74, 34, 80]
df = pd.DataFrame([(first,sec) for first,sec in zip(first,sec)])
print(df)
cols = list(df.columns)
sorted_df = df.sort_values(by = cols, ascending = True)
print("sorted - \n", sorted_df)
all_unique = [sorted_df[col].unique() for col in cols]
print("UNIQUE:\n", all_unique)
diff = [np.diff(lst) for last in all_unique]
print("DIFF - \n", diff)

Soy capaz de conseguir la lista de las listas de la diferencia. Ahora tengo que comprobar si todos los elementos en el diff son los mismos, si sí, entonces tiene que devolver el nombre de la columna, ser primero o segundo. La salida que tengo es:

   0   1
0  20  94
1  10  74
2  20  34
3  30  80
sorted - 
   0   1
0  20  94
1  10  74
2  20  30
3  30  80
UNIQUE:
[array([10, 20, 30]), array([74, 34, 94, 80])]
DIFF - 
[array([10, 10]), array([-40, 60, -14])]

Después de esto, me debe devolver el nombre de la columna o el nombre de la lista que tiene los mismos elementos. La salida deseada debe ser una lista de nombres de columna de las columnas que tienen la misma diferencia de las ordenadas de elementos únicos. Así que aquí debería de ser:

output - ['first']
dataframe pandas python
2021-11-24 06:13:28
1

Mejor respuesta

1

Uso de la lista de comprensión con la prueba de si se ordenan los valores de diferencias son únicas:

#without unique values
output = [col for col in cols if df[col].sort_values().diff().nunique() == 1]
print("OUT - \n", output)
[0]

#with unique values
output = [col for col in cols 
          if df[col].drop_duplicates().sort_values().diff().nunique() == 1]

O:

output = [col for col in cols if np.unique(np.diff(np.unique(df[col]))).shape[0] == 1]
print("OUT - \n", output)
[0]
2021-11-24 07:05:30

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................