Differenza tra gli elementi unici di colonne ordinate in un dataframe

0

Domanda

Io sono un po ' nuovo a questo. Attualmente sto sperimentando con i frame di dati in python e sono un po ' bloccato con qualcosa. Ho bisogno di ottenere le colonne del frame di dati che hanno la stessa differenza tra loro unici elementi ordinati. Io sono in grado di farlo in un codice autonome, ma voglio farlo in modo dinamico ricevendo dal frame di dati in un file.

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)

Io sono in grado di ottenere l'elenco delle liste della differenza. Ora ho bisogno di controllare se tutti gli elementi del diff sono le stesse, se sì allora devi restituire il nome della colonna, che sia prima o sec. L'output che ho ricevuto è:

   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])]

Dopo di questo, mi deve restituire la colonna del nome o il nome della lista che ha gli stessi elementi. L'output desiderato dovrebbe essere una lista di nomi di colonna delle colonne che hanno la stessa differenza delle ordinate di elementi univoci. Così qui va:

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

Migliore risposta

1

Utilizza la lista di comprensione con test se ordinate i valori delle differenze sono uniche:

#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

In altre lingue

Questa pagina è in altre lingue

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