日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas基础(part5)--透视表与交叉表

發(fā)布時(shí)間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas基础(part5)--透视表与交叉表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(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ù)匯總

  • 語法
# 以A與B做分組匯總數(shù)據(jù),針對(duì)D的每個(gè)值列級(jí)分組統(tǒng)計(jì),統(tǒng)計(jì)每個(gè)分組下C列的最大值,并添加行、列小計(jì) data.pivot_table(index=['A', 'B'], values=['C'], columns=['D'], margins=True, aggfunc='max')

接下來,我們用幾個(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ì)算分組頻率的特殊透視表

  • 語法
# 按照A列的觀測(cè)值進(jìn)行分組,針對(duì)不同的B,統(tǒng)計(jì)頻數(shù) pd.crosstab(data.A, data.B, margins=True)
  • 例子(接上面透視表案例中的數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。