【Python基础】Pandas三种实现数据透视表的方法

机器学习初学者

共 1788字,需浏览 4分钟

 ·

2020-08-18 03:29

前言

主要想做的事情用大白话来讲就是:一个dataframe里面对于两个列做分组,最后算一个value对应于这两个列的分组来算值的矩阵,这个矩阵的行为其中一个列,列也为其中一个列。

新建一个df

import pandas as pd
import numpy as np
v = [12333]
a = pd.DataFrame({'v': v})
d = [2 , 4454]
a['d'] = d
c = ['c' , 'h''d''e',  'c']
a['c'] = c

df用两列进行分组grouby

a.groupby(['v''d'])['c'].count()

我的要干的事情 就是把这个v当作列index,d当作行columns,之后把对应的分组的’c‘.count()放到对应的索引loc处,不存在的值用0填补。

最后得到一个以v为index, d为column的df,也可以搞成对应的矩阵matrix

第一种方法:pd.crosstab

cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
cpd

查看index和columns

我们再来一步就可以得到我们想要的了,把nan填充一下。

cpd = cpd.fillna(0)
cpd

转换为array和list的方法

cpd_arr1 = np.array(cpd)
cpd_arr2 = np.array(cpd.values.tolist())
cpd_arr3 = cpd.as_matrix()
cpd_list = cpd.values.tolist()

整体流程

cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
cpd = cpd.fillna(0)
cpd_arr = np.array(cpd)
cpd_arr

总结一句话

np.array(pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count').fillna(0))

第二种方法:pivot()

groupby的as_index=False

a.groupby(['v''d'], as_index=False)['c'].count()

把操作的三列的值恢复到df上,每一个列还是对应的列。

pivot

a.groupby(['v''d'], as_index=False)['c'].count().pivot('v''d''c')

对应关系如下:

整体流程

ppd = a.groupby(['v''d'], as_index=False)['c'].count().pivot('v''d''c')
ppd = ppd.fillna(0)
ppd_arr = np.array(ppd)
ppd_arr

总结一句话

np.array(a.groupby(['v''d'], as_index=False)['c'].count().pivot('v''d''c').fillna(0))

第三种方法:pivot_table

pivoted_df=pd.pivot_table(a[['v','d','c']], 
                          values='c', index=['v'],
                          columns=['d'], aggfunc='count')
pivoted_df


往期精彩回顾





获取一折本站知识星球优惠券,复制链接直接打开:

https://t.zsxq.com/662nyZF

本站qq群1003271085。

加入微信群请扫码进群(如果是博士或者准备读博士请说明):

浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报