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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas pivot 占比_数据处理进阶pandas入门(十八)

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas pivot 占比_数据处理进阶pandas入门(十八) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回顧

在數據處理進階pandas入門(十七)中,我們介紹了pandas中對groupby()方法的分組數據處理的兩個方法:transform()和apply()。我們需要掌握好這兩個方法,對分組數據進行靈活處理。今天我們講一下pandas中生成數據透視表和交叉表的方法。

生成透視表方法pivot_table()

數據透視表就是將數據的每一列作為輸入,輸出將數據不斷細分成多個維度累計信息的二維數據表。簡單來說,數據透視表更像是一種多維的groupb累計操作。pandas中使用pivot_table()方法來生成透視表,基本用法如下。?

import numpy as npimport pandas as pddate_range = pd.to_datetime(['2019-5-29', '2019-5-30', '2019-5-31']*3)df = pd.DataFrame({'date':date_range, 'key': list('abcdabcdb'), 'values':np.random.rand(9)*10})print(df)print("---------------")print(pd.pivot_table(df, values='values', index='date', columns='key', aggfunc=np.sum))

pivot_table()方法接收一個DataFrame對象 ,values表示要聚合的列;index表示從原數據中篩選出列作為數據透視表中的index索引;columns表示從原數據中篩選出列作為數據透視表中的columns索引;aggfunc表示用于聚合的函數(支持Numpy計算函數),默認為np.mean,可以用字符串或“np.”兩種形式表示。運行結果如下圖所示。

pivot_table()方法基本用法

上述代碼生成的數據透視表中有缺失值, pivot_table()方法對缺失值的處理默認以NaN填充。如果我們不想使用NaN,我們也可以通過設置fill_value來指定任意值作為缺失值的填充,基本用法如下。?

import numpy as npimport pandas as pddate_range = pd.to_datetime(['2019-5-29', '2019-5-30', '2019-5-31']*3)df = pd.DataFrame({'date':date_range, 'key': list('abcdabcdb'), 'values':np.random.rand(9)*10})print(df)print("---------------")print(pd.pivot_table(df, values='values', index='date', columns='key', aggfunc=np.sum, fill_value=0))

再次運行可以發現,缺失值的地方填充值由原來的NaN變成了0。運行結果如下圖所示。

pivot_table()方法指定缺省值填充

pivot_table()方法支持對多列數據同時做數據透視,我們只需給index傳入一個包含多列索引的列表即可。例如上述代碼中,我們給index參數傳入['date', 'key'],pivot_table()方法就會對date列和key列共同做數據透視。代碼如下。 ?

import numpy as npimport pandas as pddate_range = pd.to_datetime(['2019-5-29', '2019-5-30', '2019-5-31']*3)df = pd.DataFrame({'date':date_range, 'key': list('abcdabcdb'), 'values':np.random.rand(9)*10})print(df)print("---------------")print(pd.pivot_table(df, values='values', index=['date', 'key'], aggfunc=len))

運行結果如下圖所示。我們使用len作為聚合函數,由于原DataFrame中2019-5-31對應b有兩組數據,所以返回長度為2。

pivot_table()方法多列數據透視

生成交叉表方法crosstab()

交叉表是一種常用的分類匯總表格,利用交叉表查詢數據非常直觀明了。pandas中使用crosstab()方法來生成交叉表,crosstab()方法一般用于計算因子的頻率,可以對字符串類型的數據進行透視分析,基本用法如下。?

import numpy as npimport pandas as pddf = pd.DataFrame({'A':[1, 2, 2, 2, 2], 'B':['a', 'a', 'b', 'b', 'b'], 'C':[10, 10, np.nan, 10, 10]})print(df)print("---------------")print(pd.crosstab(df['A'], df['B']))

crosstab()方法如果只接收兩個Series,那么會生成一個頻率表。上述代碼中傳入了df['A']、df['B'],那么生成的頻率表就是用A的唯一值去統計b的唯一值出現的次數。運行結果如下圖所示,1對應‘a’出現的次數為1,2對應‘a’出現的次數為1,2對應‘b’出現的次數為3。

crosstab()方法基本用法

既然是頻率表,我們往往希望看到的是占比情況,這時只需設置crosstab()方法中的normalize參數即可。基本用法如下。?

import numpy as npimport pandas as pddf = pd.DataFrame({'A':[1, 2, 2, 2, 2], 'B':['a', 'a', 'b', 'b', 'b'], 'C':[10, 10, np.nan, 10, 10]})print(df)print("---------------")print(pd.crosstab(df['A'], df['B'], normalize=True))

normalize參數默認為False,當我們設置normalize=True時,頻率表中的所有值就會除以總和來進行歸一化(計算占比)。運行結果如下圖所示。

crosstab()方法頻率數據歸一化

crosstab()方法中有兩個參數:values和aggfunc,這兩個參數跟生成透視表方法pivot_table()中的參數一樣。事實上,crosstab()方法配合values和aggfunc這兩個參數也能生成透視表。基本用法如下。?

import numpy as npimport pandas as pddate_range = pd.to_datetime(['2019-5-29', '2019-5-30', '2019-5-31']*3)df = pd.DataFrame({'date':date_range, 'key': list('abcdabcdb'), 'values':np.random.rand(9)*10})print(df)print("---------------")print(pd.crosstab(df['date'], df['key'], values=df['values'], aggfunc=np.sum))

傳入的前兩個Series會分別作為透視表的index和columns索引,values為要聚合的列,運行結果如下圖所示,可以看到,跟pivot_table()生成的透視表完全一樣。

pivot_table()生成透視表

crosstab()方法可以通過設置margins參數給生成的表添加行/列邊距,基本用法如下。?

import numpy as npimport pandas as pddate_range = pd.to_datetime(['2019-5-29', '2019-5-30', '2019-5-31']*3)df = pd.DataFrame({'date':date_range, 'key': list('abcdabcdb'), 'values':np.random.rand(9)*10})print(df)print("---------------")print(pd.crosstab(df['date'], df['key'], values=df['values'], aggfunc=np.sum, margins=True))

margins參數默認為False,當我們設置margins=True時,會在生成的表上添加行/列,用于計算各行各列的和。運行結果如下圖所示。

crosstab()添加行/列

總結

以上內容介紹了pandas中生成數據透視表和交叉表的方法。透視表pivot_table()方法是一種進行分組統計的函數,參數aggfunc決定統計類型;而交叉表crosstab()方法是一種特殊的pivot_table()方法,雖然也可以生成透視表,但我們一般將它專用于計算分組頻率。感謝大家的支持與關注,歡迎批評指正,歡迎一起交流~

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的pandas pivot 占比_数据处理进阶pandas入门(十八)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美在线视频精品 | 台湾无码一区二区 | 亚洲综合视频网站 | 丰满少妇一区二区 | 国产精品久久99 | 欧美在线日韩在线 | 97成人精品 | 在线观看av国产一区二区 | a级在线免费观看 | 91在线看黄| 国产综合久久久久 | 日韩成人av片 | 欧美成人一二三区 | 国产chinasex对白videos麻豆 | 天堂影音 | 欧美日韩一区二区三 | 好吊妞精品 | 国产在线视视频有精品 | www.超碰| 国产九区 | 高清福利视频 | 成人性生交大片免费 | 欧美日韩在线综合 | 久久久久亚洲av无码网站 | 国产精品白嫩极品美女视频 | 午夜av一区二区三区 | 香蕉视频污视频 | 啪啪综合网| 亚洲精品视频在线播放 | 国产精品vip | 久久精品久久久久久久 | 91色呦呦| 久久这里只有精品99 | 免费看黄色漫画 | 99精品视频免费在线观看 | 欧美亚韩一区二区三区 | 免费处女在线破视频 | 亚洲性影院 | 免费黄色一级大片 | 国产日产亚洲精品 | 日韩精品免费看 | 久久怡春院 | 人妻无码一区二区三区 | 一区二区免费在线 | 野花视频免费在线观看 | 嫩草网站在线观看 | 全球av在线 | 国产精品va无码一区二区三区 | 香蕉视频污在线观看 | 4444亚洲人成无码网在线观看 | 日韩性生交大片免费看 | 一区二区在线免费 | 久久国产中文 | 欧美日韩在线免费视频 | 日韩成人福利视频 | 中文字幕av专区dvd | 国产一区二区激情视频 | 蜜臀av免费在线观看 | 色偷偷欧美 | 欧美人与物videos另类 | 手机在线成人av | 亚洲美女色视频 | 九一爱爱 | 国产激情无码一区二区三区 | 国产午夜福利精品 | 影音先锋波多野结衣 | 国产剧情一区二区 | 久久免费精品 | 欧美在线激情 | 一区二区三区www污污污网站 | 91成人免费看 | 精品国产乱码久久久久久蜜臀网站 | 日本一二三区视频在线 | 中文字幕 人妻熟女 | 九草在线观看 | 综合色在线 | 久久av色 | 一区二区三区不卡在线 | 日欧美女人 | 操大爷影院 | 日本不卡免费 | 99在线观看免费视频 | av网站免费观看 | 男生女生插插插 | 久在操 | 亚洲成人av免费 | 香港a毛片 | 国产91精品露脸国语对白 | 精品一区二区免费看 | 高潮毛片又色又爽免费 | 亚洲性xxx | 国产成人啪精品午夜在线观看 | 成人免费高清 | 美国一级大黄一片免费中文 | 成人午夜视频在线 | 五月婷婷激情小说 | 亚洲精品国产精品乱码 | av手机在线免费观看 | 国产精品伦理一区二区 |