前言
主要想做的事情用大白话来讲就是:一个dataframe里面对于两个列做分组,最后算一个value对应于这两个列的分组来算值的矩阵,这个矩阵的行为其中一个列,列也为其中一个列。
新建一个df
importpandasaspdimportnumpyasnpv=[1,2,3,3,3]a=pd.DataFrame({'v':v})d=[2,4,4,5,4]a['d']=dc=['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
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):