2017-10-04 2 views
0

je dois trier deux colonnes en fonction du nombre et le typeTrier deux colonnes en fonction du type Pandas Python

  1. 881 x
  2. 497 y
  3. 2400 x
  4. 2559 y
  5. 2556 z
  6. 1748 x
  7. 443 y
  8. 217 z
  9. 1024 y

extrait de code actuel:

import pandas as pd 
    data1 = pd.read_csv('data/extracted.csv') 
    data2 = data1.sort(['Result7d'], ascending=True) 
    data2.to_csv('data/sorted.csv') 

Avec ce type (x, y, z) est le tri, alors comment trier la catégorie individuelle en utilisant pandas géants, Python?

Résultats attendus:

  1. 881 x
  2. 1784 x
  3. 2400 x
  4. 433 y
  5. 497 z
  6. 1024 x
  7. 2559 y
  8. 217 z
  9. 2556 y
+0

besoin de 'donnée2 = data1.sort_values ​​([ 'Result7d', 'col1'], croissant = True)'? – jezrael

+0

Invite avec une erreur: AttributeError: l'objet 'DataFrame' n'a pas d'attribut 'sort_values' – Nayeem

+0

Ensuite, utilisez une ancienne version de pandas, mieux mise à niveau. – jezrael

Répondre

1

Cela pourrait fonctionner:

import pandas as pd 
data1 = pd.read_csv('data/extracted.csv') 
#data2 = data1.sort(['Result7d'], ascending=True) 
# Use sort_values instead 
data1['filenumber'] = data['file'].apply(lambda x: int(x.split('.')[0])) 
data2 = data1.sort_values(by=['type', 'filenumber']) 
del data2['filenumber'] 
data2.to_csv('data/sorted.csv') 
+0

les deux colonnes sont triées, mais la première colonne est à nouveau triée en fonction du numéro de départ, comme 1784, 2400, 881 ... – Nayeem

+0

Votre première colonne est lue comme une chaîne. Convertissez-le en un champ de type numérique. – ShreyasG

+0

J'ai aussi une extension de fichier après ce chiffre – Nayeem