Différence entre les éléments uniques de colonnes triées dans un dataframe

0

La question

Je suis un peu nouveau pour cette. Je suis actuellement à l'essai avec des trames de données en python et je suis un peu coincé avec quelque chose. J'ai besoin d'obtenir les colonnes dans le bloc de données qui ont la même différence entre le caractère unique de leurs éléments triés. Je suis capable de le faire dans un seul code, mais je veux le faire de manière dynamique par l'obtenir à partir de la trame de données dans un fichier.

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)

Je suis en mesure d'obtenir la liste des listes de la différence. Maintenant, j'ai besoin de vérifier si tous les éléments de la diff sont les mêmes, si oui, puis retourner le nom de la colonne, que ce soit la première ou de la sec. La sortie j'ai eu droit à:

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

Après cela, je doit retourner le nom de la colonne ou le nom de la liste qui a les mêmes éléments. La sortie désirée doit être une liste de noms de colonnes des colonnes qui ont la même différence de la triée des éléments uniques. Donc, ici, il devrait être:

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

La meilleure réponse

1

Utilisation de la liste de compréhension à l'essai si triés valeurs écarts sont uniques:

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

Ou:

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

Dans d'autres langues

Cette page est dans d'autres langues

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