2016-05-13 13 views
1

ich eine Probe Pandas Datenrahmen haben:Ausgabe mehrere Dateien basierend auf Spaltenwert Python Pandas

import pandas as pd 

df = {'ID': [73, 68,1,94,42,22, 28,70,47, 46,17, 19, 56, 33 ], 
    'CloneID': [1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 ], 
    'VGene': ['64D', '64D', '64D', 61, 61, 61, 311, 311, 311, 311, 311, 311, 311, 311]} 
df = pd.DataFrame(df) 

es sieht wie folgt aus:

df 
Out[7]: 
    CloneID ID VGene 
0   1 73 64D 
1   1 68 64D 
2   1 1 64D 
3   1 94 61 
4   1 42 61 
5   2 22 61 
6   2 28 311 
7   3 70 311 
8   3 47 311 
9   3 46 311 
10  4 17 311 
11  4 19 311 
12  4 56 311 
13  4 33 311 

i ein einfaches Skript zur Ausgabe schreiben wollen jede CloneID zu einer anderen Ausgabedatei. In diesem Fall wären also 4 verschiedene Dateien vorhanden. die erste Datei würde ‚CloneID1.txt‘ genannt, und es würde wie folgt aussehen:

CloneID ID VGene 
    1 73 64D 
    1 68 64D 
    1 1 64D 
    1 94 61 
    1 42 61 

zweite Datei benannt werden würde ‚CloneID2.txt‘:

CloneID ID VGene 
    2 22 61 
    2 28 311 

dritte Datei mit dem Namen würde ' CloneID3.txt: CloneID4.txt ''

CloneID ID VGene 
    3 70 311 
    3 47 311 
    3 46 311 

und letzte Datei wäre':

CloneID ID VGene 
    4 17 311 
    4 19 311 
    4 56 311 
    4 33 311 

der Code Ich war online gefunden:

import pandas as pd 
data = pd.read_excel('data.xlsx') 

for group_name, data in data.groupby('CloneID'): 
    with open('results.csv', 'a') as f: 
     data.to_csv(f) 

aber es gibt alles, um eine Datei anstelle von mehreren Dateien.

Antwort

2

Sie können wie folgt etwas tun:

In [19]: 
gp = df.groupby('CloneID') 
for g in gp.groups: 
    print('CloneID' + str(g) + '.txt') 
    print(gp.get_group(g).to_csv()) 

CloneID1.txt 
,CloneID,ID,VGene 
0,1,73,64D 
1,1,68,64D 
2,1,1,64D 
3,1,94,61 
4,1,42,61 

CloneID2.txt 
,CloneID,ID,VGene 
5,2,22,61 
6,2,28,311 

CloneID3.txt 
,CloneID,ID,VGene 
7,3,70,311 
8,3,47,311 
9,3,46,311 

CloneID4.txt 
,CloneID,ID,VGene 
10,4,17,311 
11,4,19,311 
12,4,56,311 
13,4,33,311 

Also hier iterieren wir über die Gruppen in for g in gp.groups: und wir verwenden diese die Ergebnisdatei Pfadnamen zu erstellen und to_csv auf die Gruppe nennen, so sollte die folgende Arbeit für Sie:

gp = df.groupby('CloneID') 
for g in gp.groups: 
    path = 'CloneID' + str(g) + '.txt' 
    gp.get_group(g).to_csv(path) 

Eigentlich wäre folgendes sogar noch einfacher:

gp = df.groupby('CloneID') 
gp.apply(lambda x: x.to_csv('CloneID' + str(x.name) + '.txt')) 
Verwandte Themen