日韩性视频-久久久蜜桃-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入门(十八)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产激情文学 | 亚色视频| 亚洲老女人视频 | 日韩一二三四区 | 尤物av在线 | 日韩熟妇一区二区三区 | av大片网站 | 国产激情一区二区三区视频免樱桃 | www久久久天天com | 久久久成人免费视频 | 国产午夜视频在线播放 | 久久一区二区三区四区 | 中文字幕一区二区三区四区五区 | 天天干在线播放 | 一级久久久久久久 | 性史性dvd影片农村毛片 | 国产伦精品一区二区 | 日韩欧美在线免费 | 国产福利网 | 亚洲精品a区 | 国产精品久久久久久69 | 欧美人与牲动xxxx | 性一级视频 | 国产又粗又猛又爽又黄91 | 音影先锋av资源 | 日韩大片免费观看 | caoporm超碰 | 成年人的天堂 | 国产色爱 | 永久av网站 | 欧美性受xxx | 超碰美女在线 | 一级a毛片| 国产av第一区 | 国产精品热久久 | av作品在线 | 91成人在线观看国产 | 亚洲男人天堂网址 | 伊人春色在线视频 | 欧美精品亚洲精品 | 在线观看国产黄色 | 瑟瑟视频在线免费观看 | 欧美在线免费视频 | 午夜黄色 | 婷婷久久伊人 | 婷婷色图 | www.国产在线 | 亚洲图片中文字幕 | www.中文字幕av | www一区二区| 4438x亚洲 | 在线观看国产一区二区 | 日韩一区二区三区电影 | 亚洲第一av | 青娱乐自拍视频 | 毛片一区| 欧av在线| 动漫av在线| 亚洲激情视频在线播放 | 性欧美欧美巨大69 | 国产在线观看无码免费视频 | 操操操av | 日本精品网 | 91老女人 | 欧美亚洲| 国产农村妇女毛片精品久久 | 天天操天天添 | 香蕉久久夜色精品 | av在线a| 日韩人妻无码精品久久久不卡 | 97色在线| 特黄av| 美女精品一区 | 日本男女激情视频 | 精品少妇人妻av免费久久洗澡 | 免费的毛片视频 | 久草资源网站 | 青娱乐国产精品 | 久久午夜夜伦鲁鲁片 | 热久久久久久 | 91成人在线免费视频 | 狠狠艹| 日韩午夜高清 | 欧美精品a区 | 婷婷精品在线 | 干b视频在线观看 | 高清av免费观看 | 成人在线免费视频观看 | 国产一级片麻豆 | 久久在线精品 | 国产伦精品一区二区三区照片91 | 成人片网址 | 成人777| av动漫免费观看 | porn亚洲 | 在线免费观看日韩 | 国产精品无码成人片 | 女子spa高潮呻吟抽搐 | 一级黄色片网站 |