【3.6.1】Pandas--长转宽pivot
长型数据转为宽型数据可以通过透视的功能实现,类似于excel中的透视表功能。在pandas中用pivot方法实现。
DataFrame.pivot(index=None, columns=None, values=None)
index:[str ,object ,a list of str],透视的索引
columns:[str ,object ,a list of str],透视的列
values:[str, object ,a list of the previous],透视的值
长型数据:
l_df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two','two'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
'cat':['alpha','alpha','alpha','beta','beta','beta'],
'baz': [1, 2, 3, 4, 5, 6],
'zoo': [4, 6, 8, 1, 2, 9]})
l_df
foo bar cat baz zoo
0 one A alpha 1 4
1 one B alpha 2 6
2 one C alpha 3 8
3 two A beta 4 1
4 two B beta 5 2
5 two C beta 6 9
选择foo列作为透视后的索引,bar列作为透视的列,里面的元素会展开成新数据框的列,baz作为透视的值,填充在新数据框中。
#透视数据
l_df.pivot(index='foo',columns='bar',values='baz')
bar A B C
foo
one 1 2 3
two 4 5 6
设置index为多个列名,透视表将具有多个行索引。
#多索引透视
l_df.pivot(index=['foo','bar'],columns='cat',values='baz')
cat alpha beta
foo bar
one A 1.0 NaN
B 2.0 NaN
C 3.0 NaN
two A NaN 4.0
B NaN 5.0
C NaN 6.0
设置columns为多个列名,透视表将具有多个列索引。
#多列透视
l_df.pivot(index='foo',columns=['bar','cat'],values='baz')
bar A B C A B C
cat alpha alpha alpha beta beta beta
foo
one 1.0 2.0 3.0 NaN NaN NaN
two NaN NaN NaN 4.0 5.0 6.0
设置values为多个列名。
l_df.pivot(index='foo',columns='bar',values=['baz','zoo'])
baz zoo
bar A B C A B C
foo
one 1 2 3 4 6 8
two 4 5 6 1 2 9
参考资料
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn