Ich habe ein Datenframe mit mehreren Spalten und ein paar 1000 Zeilen mit Textdaten. Eine Spalte enthält Gleitkommazahlen, die die Zeit in aufsteigender Reihenfolge darstellen (0, 0.45, 0.87, 1.10 usw.). Von diesem möchte ich einen neuen Datenrahmen bauen, der nur alle Reihen enthält, in denen diese Zeitwerte zu den ganzen Zahlen am nächsten sind x = 0, 1, 2, 3 ...Zeilen in einem Datenframe zu einer Liste von Ganzzahlen zurückgeben
Hier auf Stackoverflow fand ich ein Antwort auf eine sehr ähnliche Frage, Antwort von DSM gepostet. Der Code ist im Wesentlichen das, modifiziert (hoffentlich), um die nächstliegende Zahl an x zu geben, df ist mein Datenrahmen.
df.loc[(df.ElapsedTime-x).abs().argsort()[:1]]
Dies scheint im Wesentlichen zu tun, was ich für einen x-Wert brauche, aber ich kann nicht herausfinden, wie diese -alle- Reihen zu extrahieren über den -entire- Datenrahmen zu durchlaufen, wo der Spaltenwert am nächsten ist, x = 0,1,2,3 .... in aufsteigender Reihenfolge. Dieser Code gibt mir einen Datenrahmen, es muss eine Möglichkeit geben, dies zu loopen und die resultierenden Datenrahmen anzuhängen, um das gewünschte Ergebnis zu erhalten.
Ich habe diese versucht:
L=[]
for x in np.arange(len(df)):
L.append(df.loc[(df.ElapsedTime-x).abs().argsort()[:1]])
L
L im Prinzip hat die richtigen Zeilen, aber es ist eine schmutzige Liste und es dauert eine lange Zeit, weil die Ausführung für Schleifen nicht eine gute Möglichkeit, eine iterieren Datenrahmen. Ich würde lieber einen Datenrahmen als Ergebnis erhalten.
Ich fühle, dass mir etwas Triviales fehlt.
Nicht sicher, wie man den gewünschten Datenrahmen bekannt gibt.
Lets sagen die timevalues sind (aus meiner Datenrahmen genommen):
0.00,0.03,0.58,1.59,1.71,1.96,2.21,2.33,2.46,2.58,2.7,2.83,2.95,3.07
Die Werte für 0,1,2,3 packte 0 wäre, 0,58, 1,96, 2,95
@beroe : Wenn die Zahlen 0,8, 1,1, 1,4, 2,8 sind, sollte in diesem Fall 1,1 für 1 und 1,4 für 2 genommen werden. Wenn als Beispiel die Zahlen 0,5 1,5 2,5 sind. Während ich denke, dass dies in meinen Daten unwahrscheinlich ist, denke ich, dass es in Ordnung wäre, 1,5 als 1 und 2,5 als 2 zu wählen. In dieser Anwendung halte ich das nicht für so kritisch, obwohl ich nicht sicher bin, wie ich es umsetzen würde Dies.
Bitte lassen Sie mich wissen, wenn jemand weitere Informationen benötigt.
Bitte post ein Beispiel DataFrame und das gewünschte Ergebnis. – Alex
Was möchten Sie tun, wenn zwei Werte nahe der gleichen Ganzzahl sind, aber keine nahe der nächsten Ganzzahl in der Zeile? z. B. "0,8, 1,1, 1,4, 2,8" - Wollen Sie, dass die 1,4 für 2 gegriffen wird, obwohl sie näher an 1 ist? Wird es jemals Werte geben, bei denen derselbe Wert zwei verschiedenen Ganzzahlen am nächsten kommt? – beroe