2016-11-28 2 views
4

Ich habe eine Liste, so dassPython - elegante Art und Weise des höchsten gewichteten Wert im Set zu holen

l = ['xyz','abc','mnq','qpr'] 

Diese Werte so gewichtet werden, dass xyz>abc>mnq>qpr ich Pandas Datenrahmen mit einer Säule, die Sätze von Werten hat.

     COL_NAME  
0   set(['xyz', 'abc'])  
1   set(['xyz']) 
2   set(['mnq','qpr']) 

Nun, ich möchte die höchsten Werte in den Sätzen holen, so dass, nachdem ich die benutzerdefinierte Funktion anwenden ich links bin mit

    COL_NAME  
0   set(['xyz'])  
1   set(['xyz']) 
2   set(['mnq']) 

Gibt es eine elegante Möglichkeit, diesen Prozess zu tun, ohne Rückgriff auf ein Wörterbuch von Gewichten?

+2

Wenn Sie Ihre benutzerdefinierte Funktion in eine Schlüsselfunktion machen, dann können Sie wahrscheinlich so etwas wie '{max ({ 'xyz', 'abc'}, key = your_function)}' –

+0

leid, dass ich bearbeitet meine Frage ein bisschen. Hoffentlich mache ich jetzt viel mehr Sinn. Ich habe eine Notwendigkeit für die oben beschriebene Funktionalität, aber ich bin mir nicht sicher über die beste Art, es zu tun – Fizi

+1

Schreiben Sie eine Funktion, die den maximalen Wert basierend auf den Gewichten zurückgibt - dann verwenden Sie max(), um es zu extrahieren. – wwii

Antwort

3

können Sie pd.Categorical mit dem Parameter ordered=True verwenden und categories=l[::-1] einstellen, um die Reihenfolge zu erhalten, die Sie möchten.

def max_cat(x): 
    return set([pd.Categorical(x, l[::-1], True).max()]) 

df.COL_NAME.apply(max_cat) 

0 {xyz} 
1 {xyz} 
2 {mnq} 
Name: COL_NAME, dtype: object 
+0

Link hinzugefügt. Hoffe, Sie protestieren nicht. –

+0

@MadPhysicist überhaupt nicht – piRSquared

+0

Dies ist genau das, was ich gesucht habe. Ich habe vielleicht eine Folgefrage :) Aber nur ein Fehler - der Rückgabewert sollte gesetzt sein ([pd.Categorical (x, l [:: - 1], True) .max()]). Wenn Sie die eckigen Klammern nicht verwenden, wird die Zeichenkette in eine Menge einzelner Zeichen umgewandelt, so dass sie gesetzt werden (['xyz']), würde ich setzen (['y', 'x', 'z']) – Fizi

Verwandte Themen