<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pandas對資料框也可以像excel一樣進行資料透視表整合之類的操作。主要是針對分類資料進行操作,還可以計算數值型資料,去滿足複雜的分類資料整理的邏輯。
首先還是匯入包:
import numpy as np import pandas as pd
首先介紹的是最簡單的整理透視函數pivot,其原理如圖:
pivot引數:
用法如下,首先生成案例資料df
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'], 'bar': ['A', 'B', 'C', 'A', 'B', 'C'], 'baz': [1, 2, 3, 4, 5, 6], 'zoo': ['x', 'y', 'z', 'q', 'w', 't']}) df
df.pivot(index='foo', columns='bar', values='baz')
可以看到是一一對應。簡單來說就是把foo、bar兩個分類變數整到行列名稱上去了,baz作為值
# 多層索引,可以取其中一列 df.pivot(index='foo', columns='bar') #['baz']
# 指定值 df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
上面的pivot只適用於一一對應的情況,如果分類變數的組合一樣,但是取值不一樣就會報錯。此時應該用Pivot Table,他預設計算相同情況的均值。
引數:
df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"], "B": ["b2", "b2", "b1", "b1", "b1","b1"], "C": ['c1','c1','c2','c2','c1','c1'], "D": [1, 2, 3, 4, 5, 6]}) df
#索引a,列b使用Pivot會報錯,因為他們之間的組合有重複,要用Pivot Table,預設計算均值 pd.pivot_table(df,index='A',columns='B',values='D')
#驗證一下b1,a2這個均值5 df.loc[(df.A=='a2')&(df.B=='b1')].D.mean()
pd.pivot_table(df,index=['A','B'],#指定多個索引 columns=['C'], #指定列 values='D', #資料值列 aggfunc=np.sum, #聚合函數 fill_value=0, #空值填充 margins=True #增加彙總列 )
#多個計算方法
pd.pivot_table(df,index=['A','B'],#指定多個索引 columns=['C'], #指定列 values='D', #資料值列 aggfunc=[np.sum,np.mean,np.std] )
交叉表是用於統計分組頻率的特殊透視表。簡單來說,就是將兩個或者多個列重中不重複的元素組成一個新的 DataFrame,新資料的行和列交叉的部分值為其組合在原資料中的數量
語法結構如下:
pd.crosstab(index, columns, values=None, rownames=None,colnames=None, aggfunc=None, margins=False,
margins_name: str = 'All', dropna: bool = True,normalize=False) #→ 'DataFrame'
引數說明:
index:類陣列,在行中按分組的值。
columns:類陣列的值,用於在列中進行分組。
values:類陣列的,可選的,要根據因素彙總的值陣列。
aggfunc:函數,可選,如果未傳遞任何值陣列,則計算頻率表。
rownames:序列,預設為None,必須與傳遞的行陣列數匹配。
colnames:序列,預設值為None,如果傳遞,則必須與傳遞的列陣列數匹配。
margins:布林值,預設為False,新增行/列邊距(小計)
normalize:布林值,{'all','index','columns'}或{0,1},預設為False。 通過將所有值除以值的總和進行歸一化。'
生成案例資料:
df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"], "B": ["b2", "b2", "b1", "b1", "b1","b1"], "C": ['c1','c1','c2','c2','c1','c1'], "D": [1, 2, 3, 4, 5, 6]}) df
pd.crosstab(df['A'],df['B']) #都是分類資料,計算頻率
pd.crosstab(df['A'],df['C']) #都是分類資料
#對交叉結果進行歸一化: pd.crosstab(df['A'], df['B'], normalize=True)
#對每列進行歸一化: pd.crosstab(df['A'], df['B'], normalize='columns')
#聚合,指定列做為值,並將這些值按一定演演算法進行聚合: pd.crosstab(df['A'], df['C'], values=df['D'], aggfunc=np.sum) #分類和數值
#邊距彙總,在最右邊增加一個彙總列: pd.crosstab(df['A'], df['B'],values=df['D'],aggfunc=np.sum, normalize=True,margins=True)
#df.melt() 是 df.pivot() 逆轉操作函數。簡單說就是將指定的列放到鋪開放到行上名為variable(可指定)列,值在value(可指定)列
語法結構:
具體語法結構如下:
pd.melt(frame: pandas.core.frame.DataFrame,id_vars=None, value_vars=None, var_name='variable', value_name='value',col_level=None)
其中:
生成案例資料:
df=pd.DataFrame({'A':['a1','a2','a3','a4','a5'], 'B':['b1','b2','b3','b4','b5'], 'C':[1,2,3,4,5]}) df
pd.melt(df)
#指定標識和值, pd.melt(df,id_vars=['A']) #只對BC展開
pd.melt(df,value_vars=['B','C']) #保留BC,並展開
#同時指定,並命名 pd.melt(df,id_vars=['A'],value_vars=['B'],var_name='B_label',value_name='B_value')
#stack就是把列變數堆到行上,unstack就是行變到列上
生成案例資料 :
#堆疊 stack 單層索引: df = pd.DataFrame({'A':['a1','a1','a2','a2'], 'B':['b1','b2','b1','b2'], 'C':[1,2,3,4], 'D':[5,6,7,8], 'E':[5,6,7,8]}) df.set_index(['A','B'],inplace=True) df
stack 堆疊
df.stack()
unstack 解堆
df.stack().unstack()
df.stack().unstack().unstack()
df.stack().unstack().unstack().unstack()
可以看到,解堆就是不停地把列變數弄到行上去作為索引。
到此這篇關於Pandas資料分析之pandas資料透視表和交叉表的文章就介紹到這了,更多相關pandas資料透視表內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45