2016-09-22 3 views
1

Ich habe eine Pandas Datenrahmen q2, die wie folgt aussieht:Anzeige Pandas Datenrahmen im csv-Format

StudentID  Subjects 
6   323  History 
9   323  Physics 
8   999 Chemistry 
7   999  History 
4   999  Physics 
0  1234 Chemistry 
5  2834  Physics 
1  3455 Chemistry 
2  3455  History 
10  3455 Mathematics 
3  56767 Mathematics 

Ich möchte herausfinden, welche Schüler welche Kurse stattgefunden hat und es auf dem Bildschirm angezeigt werden soll.

gb = q2.groupby(('StudentID')) 
result = gb['Subjects'].unique() 

c1=pd.DataFrame({'StudentID':result.index, 'Subjects':result.values}) 

c1 sieht aus wie dieses

StudentID       Subjects 
0  323     [History, Physics] 
1  999  [Chemistry, History, Physics] 
2  1234      [Chemistry] 
3  2834       [Physics] 
4  3455 [Chemistry, History, Mathematics] 
5  56767      [Mathematics] 

jedoch die gewünschte Ausgabe ist die folgende:

323: History, Physics 
999: Chemistry, History, Physics 
1234: Chemistry 
2834: Physics 
3455: Chemistry, History, Mathematics 
56767: Mathematics 

was kann ich tun?

Antwort

2

Ich denke, Sie können apply Funktion join. Auch für DataFrame erstellen, können Sie reset_index verwenden:

gb = q2.groupby(('StudentID')) 
result = gb['Subjects'].unique() 

c1 = result.reset_index() 

c1.Subjects = c1.Subjects.apply(', '.join) 
print (c1) 
    StudentID       Subjects 
0  323     History, Physics 
1  999  Chemistry, History, Physics 
2  1234      Chemistry 
3  2834       Physics 
4  3455 Chemistry, History, Mathematics 
5  56767      Mathematics 

Letzte Sie Spalte StudentID-str werfen kann (wenn dtype ist int) und concanecate zusammen:

c1['new'] = c1.StudentID.astype(str) + ':' + c1.Subjects 
print (c1) 
    StudentID       Subjects \ 
0  323     History, Physics 
1  999  Chemistry, History, Physics 
2  1234      Chemistry 
3  2834       Physics 
4  3455 Chemistry, History, Mathematics 
5  56767      Mathematics 

            new 
0     323:History, Physics 
1  999:Chemistry, History, Physics 
2      1234:Chemistry 
3       2834:Physics 
4 3455:Chemistry, History, Mathematics 
5      56767:Mathematics 

auch wenn Originaldaten überschrieben werden kann, verwenden :

result = result.index.to_series().astype(str) + ':' + result.apply(', '.join) 
print (result) 
StudentID 
323      323:History, Physics 
999   999:Chemistry, History, Physics 
1234       1234:Chemistry 
2834        2834:Physics 
3455  3455:Chemistry, History, Mathematics 
56767      56767:Mathematics 
dtype: object 
+0

Danke, aber es ähnelt immer noch nicht der gewünschten Ausgabe Schau bitte oben! – GKS

+0

@ GKS - danke, tut mir leid, ich habe es verpasst. Jetzt ist es richtig? – jezrael

+0

Es ist perfekt! Vielen Dank :-) – GKS