【Python基础】Pandas三种实现数据透视表的方法
生活随笔
收集整理的這篇文章主要介紹了
【Python基础】Pandas三种实现数据透视表的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
主要想做的事情用大白話來講就是:一個dataframe里面對于兩個列做分組,最后算一個value對應于這兩個列的分組來算值的矩陣,這個矩陣的行為其中一個列,列也為其中一個列。
新建一個df
import?pandas?as?pd import?numpy?as?np v?=?[1,?2,?3,?3,?3] a?=?pd.DataFrame({'v':?v}) d?=?[2?,?4,?4,?5,?4] a['d']?=?d c?=?['c'?,?'h',?'d',?'e',??'c'] a['c']?=?cdf用兩列進行分組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。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明): 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【Python基础】Pandas三种实现数据透视表的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Pandas笔记--
- 下一篇: 【Python基础】5个Pandas技巧