2017-05-28 1 views
0

Ich habe Daten von Excel in einen Pandas Datenrahmen geladen. Ich möchte jetzt nur die Zeilen auswählen, deren BEURTEILUNGS-ID die maximale BEWERTUNGS-ID pro APPID und für alle UI-SEQ-NUMMERN für diese APPID ist.Auswählen bestimmter Zeilen in DF basierend auf 2 Spalten in Python Pandas

APPID APPNAME ASSESSMENT ID UI SEQ NUMBER QUESTION ANSWER TEXT . 
1 appname 2493 11 Question No . 
1 appname 13808 11 Question Ctry of domicile . 
1 appname 13808 11 Question Name . 
1 appname 35316 11 Question Ctry of domicile .  
1 appname 35316 11 Question Name . 
1 appname 35316 11 Question Nationality .  
1 appname 2493 12 Question Corp name . 
1 appname 2493 12 Question Cr Br Scr . 
1 appname 2493 12 Question Inc And Assests . 
1 appname 2493 12 Question Int, Ext Reg Reports . 
1 appname 13808 12 Question Corp name . 
1 appname 35316 12 Question Corp name . 
1 appname 2493 13 Question No . 
1 appname 13808 13 Question No . 
1 appname 35316 13 Question No . 
1 appname 2493 14 Question No . 
1 appname 13808 14 Question firms Pos . 
1 appname 35316 14 Question firms Pos . 

Und das Ergebnis wäre

APPID APPNAME ASSESSMENT ID UI SEQ NUMBER QUESTION ANSWER TEXT . 
1 appname 35316 11 Question Ctry of domicile . 
1 appname 35316 11 Question Name . 
1 appname 35316 11 Question Nationality . 
1 appname 35316 12 Question Corp name . 
1 appname 35316 13 Question No . 
1 appname 35316 14 Question firms Pos . 
+0

Bitte [Posten Sie keine Bilder von Code (oder Links zu ihnen)] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-- so-wenn-Frage stellend) – jezrael

+0

Entschuldigung für das Posten des Bildes, Aber es gab keinen anderen Weg ich konnte die Daten von hier auf Excel ohne korrekte Formatierung notieren – vivek

+0

Hmmm, wenn Kopie Paste und addiert 4 Räume vor jeder Reihe es nicht tut Arbeit? – jezrael

Antwort

1

sein Ich glaube, Sie brauchen boolean indexing mit Maske von apply erstellt:

df1 = df[df.groupby(['APPID', 'UI SEQ NUMBER'])['ASSESSMENT ID'].apply(lambda x:x==x.max())] 
print (df1) 
    APPID APPNAME ASSESSMENT ID UI SEQ NUMBER QUESTION  ANSWER TEXT. 
3  1 appname   35316    11 Question Ctry of domicile. 
4  1 appname   35316    11 Question    Name. 
5  1 appname   35316    11 Question  Nationality. 
11  1 appname   35316    12 Question   Corp name. 
14  1 appname   35316    13 Question    No. 
17  1 appname   35316    14 Question   firms Pos. 

Oder wenn brauchen nicht alle duplizierten Werte verwenden idxmax:

df1 = df.loc[df.groupby(['APPID', 'UI SEQ NUMBER'])['ASSESSMENT ID'].idxmax()] 
print (df1) 
    APPID APPNAME ASSESSMENT ID UI SEQ NUMBER QUESTION  ANSWER TEXT. 
3  1 appname   35316    11 Question Ctry of domicile. 
11  1 appname   35316    12 Question   Corp name. 
14  1 appname   35316    13 Question    No. 
17  1 appname   35316    14 Question   firms Pos. 
+0

Perfekt jezrael. das hat es gelöst. Ich habe folgendes gemacht: -df [df.groupby (['APPID', 'UI SEQ NUMBERS']) ['BEWERTUNG ID']. Max() – vivek

+0

Dann ist besser ist 'df1 = df.loc [df.groupby (['APPID', 'UI-SEQ-NUMMER']) ['BEWERTUNG ID']. Idxmax()] ' – jezrael

Verwandte Themen