Bir veri çerçevesindeki sıralanmış sütunların benzersiz öğeleri arasındaki fark

0

Soru

Bunun için biraz yeni duyuyorum. Şu anda python'da veri çerçeveleri deniyorum ve bir şeyle biraz sıkışıp kaldım. Benzersiz sıralanmış öğeleri arasında aynı farka sahip olan veri çerçevesindeki sütunları almam gerekiyor. Bunu tek başına bir kodda yapabilirim, ancak bunu bir dosyadaki veri çerçevesinden alarak dinamik olarak yapmak istiyorum.

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)

Fark listelerinin listesini alabiliyorum. Şimdi, farktaki tüm öğelerin aynı olup olmadığını kontrol etmem gerekiyor, eğer evet ise, önce veya saniye olsun, sütunun adını döndürmem gerekiyor. Aldığım çıktı şu şekildedir:

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

Bundan sonra, sütun adını veya aynı öğelere sahip liste adını döndürmeliyim. İstenen çıktı, sıralanmış benzersiz öğelerle aynı farklılığa sahip sütunların sütun adlarının bir listesi olmalıdır. Yani burada olmalı:

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

En iyi cevabı

1

Sıralanmış değerler farklılıklarının benzersiz olup olmadığını test ile liste anlama özelliğini kullanın:

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

Veya:

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

Diğer dillerde

Bu sayfa diğer dillerde

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