2016-07-14 15 views
1

Ich habe DatenPandas: print pivot_table zu Dataframe

id year val 
123 2014 1 
123 2015 0 
123 2016 1 
456 2014 0 
456 2015 0 
456 2016 1 
789 2014 1 
789 2015 0 
789 2015 0 

Und ich will pivot_table drucken und erhalten

date  2014 2015 2016 
ID 
123  1  0  1 
456  0  0  1 
789  1  0  0 

Ich benutze group = output.pivot_table('val', index='ID', columns='date')
aber es gibt nicht, was ich will

filtered_dates      2013  2014  2015 
ID                
0001ee12f919a1b570658024bb59d118 0.000000 0.083333 0.000000 
00038d100ed66bd4f5e3699302e1152f 0.000000 0.083333 0.000000 
00051f002f5a0c179d7ce191ca2c6401 0.000000 0.000000 0.083333 

Antwort

1

Sie können verwenden:

group = output.pivot_table(index='id', values='val', columns='year', fill_value=0) 
print (group) 
year 2014 2015 2016 
id      
123  1  0  1 
456  0  0  1 
789  1  0  0 

EDIT:

Sie erhalten diese Werte mit realen Daten, becasue es Duplikate sind in id und year und dann pivot_table aggregierten Daten. Sie können aggragation Funktion angeben:

print (output) 
    id year val 
0 123 2014 1 #duplicates1 
1 123 2014 2 #duplicates1 
2 123 2015 2 
3 123 2016 3 
4 456 2014 3 
5 456 2015 7 #duplicates2 
6 456 2015 5 #duplicates2 
7 456 2016 1 
#if aggfunc is omit, default function is np.mean 
group1 = output.pivot_table(index='id', values='val', columns='year', aggfunc=np.mean) 
print (group1) 
year 2014 2015 2016 
id      
123 1.5  2  3 
456 3.0  6  1 

andere Aggregationsfunktionen:

group2 = output.pivot_table(index='id', values='val', columns='year', aggfunc=len) 
print (group2) 
year 2014 2015 2016 
id      
123  2  1  1 
456  1  2  1 

group3 = output.pivot_table(index='id', values='val', columns='year', aggfunc=sum) 
print (group3) 
year 2014 2015 2016 
id      
123  3  2  3 
456  3 12  1 

group4 = output.pivot_table(index='id', values='val', columns='year', aggfunc='first') 
print (group4) 
year 2014 2015 2016 
id      
123  1  2  3 
456  3  7  1 

output['val'] = output.val.astype(str) 
group5 = output.pivot_table(index='id', values='val', columns='year', aggfunc=','.join) 
print (group5) 
year 2014 2015 2016 
id     
123 1,2 2 3 
456  3 7,5 1 
+0

ich in Frage hinzufügen, was Ihr Code zurückgeben – ldevyataykina