pandas基础(part5)--透视表与交叉表
學(xué)習(xí)筆記,這個(gè)筆記以例子為主。
開發(fā)工具:Spyder
文章目錄
- Pandas透視表
- Pandas交叉表
Pandas透視表
透視表(pivot table)是各種電子表格程序和其他數(shù)據(jù)分析軟件中一種常見的數(shù)據(jù)匯總工具。它根據(jù)一個(gè)或多個(gè)鍵對(duì)數(shù)據(jù)進(jìn)行分組聚合,并對(duì)每個(gè)分組進(jìn)行數(shù)據(jù)匯總。
- 語法
接下來,我們用幾個(gè)例子來學(xué)習(xí)如何用pandas來制作想要的數(shù)據(jù)透視表。
首先,我們來康康接下來幾個(gè)例子所要使用的數(shù)據(jù):
代碼:
import pandas as pdleftD = {'name':['Ada', 'Tom','Black', 'Jack', 'Lee', 'Yellow', 'Blue', 'Peter', 'Green', 'Trump'],'age':[9, 9, 10, 10, 10, 10, 8, 9, 7, 8],'weight':[8, 4, 5, 6, 10, 10, 4, 5, 4, 8],'gender':['M', 'F', 'M', 'M', 'M', 'F', 'M', 'M', 'M', 'F'],'Bunny_id':[1, 2, 3, 4, 2, 4, 3, 1, 4, 5]}rightD = {'Bunny_id':[1, 2, 3, 4, 5],'foods':['A', 'B', 'C', 'D', 'E']}df_leftD = pd.DataFrame(leftD) df_rightD = pd.DataFrame(rightD)df = pd.merge(df_leftD, df_rightD, how = 'outer') print(df)數(shù)據(jù):
Bunny_id age gender name weight foods 0 1 9 M Ada 8 A 1 1 9 M Peter 5 A 2 2 9 F Tom 4 B 3 2 10 M Lee 10 B 4 3 10 M Black 5 C 5 3 8 M Blue 4 C 6 4 10 M Jack 6 D 7 4 10 F Yellow 10 D 8 4 7 M Green 4 D 9 5 8 F Trump 8 E- 例子1
代碼:
#以Bunny_id做分組匯總數(shù)據(jù),默認(rèn)統(tǒng)計(jì)所有列的均值 print(df.pivot_table(index=['Bunny_id']))結(jié)果:
age weight Bunny_id 1 9.0 6.500000 2 9.5 7.000000 3 9.0 4.500000 4 9.0 6.666667 5 8.0 8.000000由結(jié)果可知,由于除了Bunny_id這個(gè)變量以外,只有age和weight為數(shù)值型變量,故pandas計(jì)算了age和weight的均值。
- 例子2
代碼:
#以Bunny_id與gender做分組匯總數(shù)據(jù),默認(rèn)統(tǒng)計(jì)所有列的最大值 print(df.pivot_table(index=['Bunny_id', 'gender'], aggfunc='max'))結(jié)果:
age foods name weight Bunny_id gender 1 M 9 A Peter 8 2 F 9 B Tom 4M 10 B Lee 10 3 M 10 C Blue 5 4 F 10 D Yellow 10M 10 D Jack 6 5 F 8 E Trump 8由結(jié)果可知,pandas先按照Bunny_id進(jìn)行分組,再按照gender進(jìn)行分組。最后對(duì)分組結(jié)果,分別計(jì)算age、foods、name、weight的最大值。
- 例子3
代碼:
#以Bunny_id與gender做分組匯總數(shù)據(jù),統(tǒng)計(jì)age列的均值 print(df.pivot_table(index=['Bunny_id', 'gender'], values=['age']))結(jié)果:
age Bunny_id gender 1 M 9.0 2 F 9.0M 10.0 3 M 9.0 4 F 10.0M 8.5 5 F 8.0由結(jié)果可知,pandas先對(duì)Bunny_id和gender進(jìn)行分組,并只顯示age的分組平均值。
- 例子4
代碼:
#以Bunny_id與gender做分組匯總數(shù)據(jù),針對(duì)weight的每個(gè)值列級(jí)分組,統(tǒng)計(jì)age列的均值。 print(df.pivot_table(index=['Bunny_id', 'gender'], values=['age'], columns=['weight']))結(jié)果;
age weight 4 5 6 8 10 Bunny_id gender 1 M NaN 9.0 NaN 9.0 NaN 2 F 9.0 NaN NaN NaN NaNM NaN NaN NaN NaN 10.0 3 M 8.0 10.0 NaN NaN NaN 4 F NaN NaN NaN NaN 10.0M 7.0 NaN 10.0 NaN NaN 5 F NaN NaN NaN 8.0 NaN由結(jié)果可知,Bunny_id和gender的組合作為行,weight作為列,共同構(gòu)造了二維表,表中值為每個(gè)分組中age的平均值,如果對(duì)應(yīng)分組沒有值,則該位置用NaN代替。
Pandas交叉表
交叉表(cross-tabulation, 簡(jiǎn)稱crosstab)是一種用于計(jì)算分組頻率的特殊透視表
- 語法
- 例子(接上面透視表案例中的數(shù)據(jù))
代碼:
print(pd.crosstab(df.gender, df.foods))結(jié)果:
foods A B C D E gender F 0 1 0 1 1 M 2 1 2 2 0總結(jié)
以上是生活随笔為你收集整理的pandas基础(part5)--透视表与交叉表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这哪是NBA球场!简直就是黑科技实验室啊
- 下一篇: R语言之离群点检验(part1)--利用