Ich habe, was ich hoffe, ein einzigartiges/interessantes Problem für meine erste Frage zu Stack Overflow!Hunderter von Spalten und Spaltenindizes zu einer Zeichenkette zusammenfügen
Ich habe Daten über Fähigkeiten Bewertungen, derzeit in einem sehr großen Pandas Datenrahmen. Jede Zeile repräsentiert einen Schüler und jede Spalte enthält ihre Punkte für eine bestimmte Fähigkeitsbewertung. Insgesamt gibt es etwa 200 Skills Assessments, wobei jeder Student nur eine kleine Teilmenge dieser Assessments bewertet (1 - 20 Scores sind typisch, aber einige Studenten haben mehr).
Beispiel Datenrahmen Struktur:
id skill1 skill2 skill3 skill4 skill5 ....
1 10 50 NaN 3 NaN
2 Nan 10 2 70 NaN
3 23 NaN 45 NaN 5
ich versucht bin, diese Daten in eine durch Leerzeichen getrennte Zeichenfolge für jeden Schüler umgewandelt zu bekommen, in folgendem Format, so dass wir sie in einen anderen Datenspeicher importieren:
skill1:10 skill2:50 skill4:3
skill2:10 skill3:2 skill4:70
(beachten Sie, wie Fähigkeiten ohne Einschätzungen Partituren in die Liste nicht hinzugefügt bekommen)
ich habe eine Lambda-Funktion verbinden alle die geschaffen se Fähigkeit Werte mit ihren Spaltenbeschriftungen:
skillmerge = lambda row: ' '.join([str(row.index[i])+':'+str(row[i]) for i in range(0,len(row)) if row[i]!=np.nan])
Wenn ich eine einzige Serie erstellt (1 Teilnehmer) zu testen, auf der Lambda-Funktion dauert weniger als eine Sekunde, um die Ausgabezeichenfolge in meinem gewünschten Format zu erstellen. Allerdings, wenn ich einen Datenrahmen mit nur 2 Reihen (wieder für Testzwecke) zu erstellen, die Funktion nur einige Minuten in Anspruch nimmt, diese zwei Zeilen zu vervollständigen:
testing_df['combined_skills'] = testing_df.apply(skillmerge, axis=1)
Da, wie ich habe ein paar Millionen Studenten in diesem Datensatz, Ich suche nach einem Weg, um diesen Prozess zuverlässig schneller arbeiten zu lassen. Irgendwelche Gedanken, wo ich das beheben kann?
Vielen Dank im Voraus für die Hilfe bei meiner ersten SO Frage! : D
Sie konnten die 'row.index nur berechnen [i]', bevor die Liste Verständnis, da die Etiketten gleich bleiben –
Nun, sie nicht genau konstant bleiben. Das gewünschte Ausgabeformat enthält keine Fähigkeiten, für die kein Bewertungsfaktor vorhanden ist. –
Nein, aber Ihr Listenverständnis wird immer noch jeden Wert von "i" in "Bereich (len (Indizes))" gegen "row [i]! = Np.nan" testen. Sie könnten also vorher eine Liste mit allen Indizes erstellen, z. 'my_index_list = [skill1, skill2, ... skilln]' und ändere dann 'row.index [i]' in 'my_index_list [i]'. Es ist mir nicht klar, warum Runtime mit nur 1 zusätzlichen Zeile explodieren würde. – roganjosh