Pandas:将pivot_table打印到dataframe

时间:2016-07-14 11:24:22

标签: python pandas

我有数据

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

我想打印pivot_table并获取

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

我使用group = output.pivot_table('val', index='ID', columns='date')
但它不是我想要的回报

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

1 个答案:

答案 0 :(得分:1)

您可以使用:

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

编辑:

您可以使用实际数据获取这些值,因为idyear以及pivot_table汇总数据存在重复数据。您可以指定aggragation函数:

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

另一个聚合函数:

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