2017-08-25 2 views
0

Grundlegende Grundfrage, aber nicht richtig. Ich versuche, nach Noten zu sortieren und dann den Spitznamen mit der höchsten Punktzahl zu verknüpfen.Sortierung in Pandas führt nicht zu erwarteten Ergebnissen

import pandas as pd 
df = pd.DataFrame({'score' :[1,5,7,999], 'name':['jack','jill','chris','kevin']}) 
df.sort_values(by= 'score', ascending=False, inplace=True) 
df 
df.name[0] 

jedoch mit diesem Ansatz erhalte ich Jack von Kevin statt, da es die Namen in den Datenrahmen Schöpfung erschien durch die Reihenfolge zu gehen scheint. Was ist das Offensichtliche, was mir fehlt?

Antwort

3

Das ist, weil, wenn Sie auf df.name[0] zugreifen, es auf den Index der Zeile zeigt (Auschecken durch Aufruf df.index). Der Indexwert der Zeile mit dem Namen jack lautet 0, da die erste Instanz jack war, als Sie die df erstellten.

Um auf die erste Zeile des sortierten DF zuzugreifen, verwenden Sie .iloc für die Positionsindexierung (oder .loc, wenn Sie eine labelbasierte Indexierung wünschen).

import pandas as pd 
df = pd.DataFrame({'score' :[1,5,7,999], 'name':['jack','jill','chris','kevin']}) 
df.sort_values(by= 'score', ascending=False, inplace=True) 
df 
df.name.iloc[0] 

Dies gibt kevin zurück.

0

Der Index kann durch reset_index umstrukturiert werden.

In Ihrem Fall führen Sie unten aus, nachdem sort_values ​​den Index umstrukturieren würde.

df.reset_index(drop=True, inplace=True) 
0

dieses .using Versuchen idxmax

df.loc[df.score.idxmax(),'name'] 

Out[5631]: 'kevin' 
Verwandte Themen