我有数据
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
答案 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
编辑:
您可以使用实际数据获取这些值,因为id
和year
以及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