2016-12-21 2 views
1

Als Teil einer großen Funktion bin ich mit einer der letzten Zeilen fest. Ich sollte den Zeilen- und Spaltennamen der höchsten (wenigen) Werte in einem (Pandas) Datenrahmen erhalten. Dafür habe ich es entstapelt, sortiert und die letzten 2 Zeilen ausgedruckt. Verwendung:Erhalte verschiedene Objekte aus dem in64-Datentyp return

df2=zerotriangle_frame.unstack() 
sorted_df = df2.sort_values(inplace=True) 
x = df2[-2:] 

Dies resultiert in:

seq_6120 seq_1761 34 
seq_4833 seq_1761 37 
dtype: int64 

Dieses gut ist (beziehungsweise: seq_4833 und seq_1761 sind Zeilen- und Spaltennamen höchsten Wert (höchste Sequenz simmilarity in Zusammenhang ähnelt) in Datenrahmen, seq_6120 und seq_1761 ähnlich dem zweithöchsten Wert ...), aber ich möchte diese Ausgabe irgendwie formatieren, damit ich die verschiedenen Teile in einer Druckabteilung benutzen kann. zum Beispiel:

print("sequenc {0} and sequence {1} got the highest simmilarity value:{2}".format(a, b, c)) 

wobei a, b und c sollten jeweils seq_4833, seq_1761 und 37 sein ... Wenn das Ergebnis eine Liste oder Tupel war ich es gespalten konnte, aber jetzt stecken ich bin.

PS: Wenn die Werte (34 und 37 im Beispiel) gleich sind, sollte ich eine spezifische Fehlermeldung ausgeben (wie 'mehr als ein Paar Sequenzen mit der gleichen Ähnlichkeit').

Antwort

0

Angenommen, df2 ist Ihr endgültiger Datenrahmen, dann können Sie nur nach allen Zeilen filtern, die dem Maximalwert entsprechen, und eine if-Anweisung schreiben, um die Ausgabe zu erzeugen.

# assuming df2 is a dataframe with columns a,b,c 
df3 = df2[df2.c == df2.c.max()] 

if len(df3) == 1: 
    print("sequence {0} and sequence {1} got the highest simmilarity value:{2}".format(df3.a.values[0], df3.b.values[0], df3.c.values[0])) 
else: 
    for i, row in df3.iterrows(): 
     print("sequence {0} and sequence {1} got the same simmilarity value:{2}".format(row.a, row.b, row.c)) 
+0

, die irgendwie ein Problem ... –

+0

Ich kann nicht mein Ergebnis in einen Datenrahmen mit Spaltennamen a, b und c machen ... Also, was Sie in meiner Frage sehen x ist. Wenn ich dies in einen Datenrahmen umwandeln möchte, mache ich: df2 = pd.DataFrame (x, Spalten = ['a', 'b', 'c'], aber das funktioniert nicht –

+0

X ist eine Serie. Do x. reset_index() Und dann haben Sie einen Datenrahmen –

Verwandte Themen