2016-05-18 21 views
-2

Ich habe eine Datei, die ich nach einer Spalte in einer anderen Datei sortieren möchte. Beide Dateien haben eine gemeinsame Spalte und die Sortierung sollte der Sortierung der ersten Datei entsprechen.Wie sortiere ich eine Datei nach einer Spalte in einer anderen Datei?

Zum Beispiel: DATEI_1 enthält:

chr2L 2808299 2808300 EOG698VMB 4.15912 + 1011 

chr2L 5218259 5218260 EOG6ZPFGT 15.0025 + 91 

chr2L 5329859 5329860 EOG62JPCT 30.1536 + 30 

chr2L 6225049 6225050 EOG60024V 3.26788 + 29 

chr2L 6255843 6255844 EOG61C7HF 12.6259 + 32 

chr2L 6481023 6481024 EOG6CZC26 1.33686 + 176 

chr2L 8522135 8522136 EOG6FN543 40.2544 + 142 

chr2L 9769068 9769069 EOG6FBJDN 17.8248 + 15 

chr2L 9782391 9782392 EOG6R24FN 9.50656 + 393 

File_2 enthält:

chrXL_group1e 895799 895800 EOG67ST24 71.1687 + 62 

chrXL_group1e 3113233 3113234 EOG6PVPKK 7.19303 + 847 

chrXL_group1e 3424413 3424414 EOG6QC1SM 6.76991 + 81 

chrXL_group1e 5698899 5698900 EOG651FCJ 93.5094 + 124 

chrXL_group1e 6595546 6595547 EOG60K8KJ 28.349 + 185 

chrXL_group1e 7594832 7594833 EOG6C2HX6 1.7771 + 2782 

chrXL_group1e 8307304 8307305 EOG6NP7QS 229.754 + 35 

chrXL_group1e 9922625 9922626 EOG6X3HMJ 8.8855 + 3744 

chrXL_group1e 10297871 10297872 EOG6F7P63 2.70796 + 106 

chrXL_group1e 11284647 11284648 EOG62Z5BX 282.474 + 4173 

chr4_group5 213215 213216 EOG6J9NKZ 834.56 + 32 

chrXR_group5 636614 636615 EOG6PVPK4 4.56969 + 152 

ich den Inhalt File_2 entsprechend der Reihenfolge in der Spalte 4 (Protein ID) gegeben sortiert werden sollen von Datei_1. (Es wird Unterschiede in dem Beispiel geben. Ich kann die Originaldateien hochladen, wenn Sie möchten.) Wie mache ich das in Python?
Ich glaube nicht, dass die Protein-IDs in einer bestimmten Weise sortiert sind. Aber die Art, wie sie in Datei_1 sortiert werden, ist wichtig.

Weitere Details:

Programmiersprache: Python 3.5.1

OS: Ubuntu 16.04 LTS

Vielen Dank für Ihre Antwort. :)

+0

Im Allgemeinen würde ich als Pandas 'DataFrame' in beiden Dateien lesen Sie sagen, und dann Zusammenführen, aber Ihre Beispiele machen es schwierig zu sehen, wie die Informationen zu Datei 2 mit der in Datei 1 verwandt sind (passen Sie irgendwie in die erste Spalte?) –

+0

Verwenden Sie ein dict mapping column-Element zum Indizieren aus der Datei, die enthält Die Sortierreihenfolge und verwenden Sie dieses dict als Schlüssel zum Sortieren –

+0

@NilsGudat Nein, ich bin die vierte Spalte übereinstimmen. Die Reihenfolge der vierten Spalte sollte in beiden Dateien identisch sein. – DarkRose

Antwort

-1

Die Funktion sorted kann ein Schlüsselwortargument mit der Bezeichnung key empfangen, das eine Funktion ist, die ein vergleichbares Argument für jedes Element der Liste zurückgibt.

Wenn Sie zwei Listen mit den DATEI_1 Spalten in einem und die File_2 Spalten in der anderen, könnten Sie verwenden:

indexes = sorted(range(len(File_2Column)), key=lambda i: File_1Col4[i]) 
sortedFile_2Col = [File_2Column[i] for i in indexes] 
# you can repeat this line for all the columns you want to be sorted by that order 
+0

Also, wie ordne ich die ganze Datei neu? Die anderen Spalten müssen entsprechend geändert werden. – DarkRose

+0

Nachdem Sie 'indexes' zugewiesen haben, können Sie jede Spalte mit dieser Zeile anordnen:' sortedFile_2Col = [File_2Column [i] für i in Indizes] ' –