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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

玩转 Pandas 的 Groupby 操作

發(fā)布時間:2024/9/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转 Pandas 的 Groupby 操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:Lemon

來源:Python數(shù)據(jù)之道

玩轉(zhuǎn) Pandas 的 Groupby 操作

大家好,我是 Lemon,今天來跟大家分享下 pandas 中 groupby 的用法。

Pandas 的 groupby() 功能很強(qiáng)大,用好了可以方便的解決很多問題,在數(shù)據(jù)處理以及日常工作中經(jīng)常能施展拳腳。

今天,我們一起來領(lǐng)略下 groupby() 的魅力吧。

首先,引入相關(guān) package :

import?pandas?as?pd import?numpy?as?np

groupby 的基礎(chǔ)操作

經(jīng)常用 groupby 對 pandas 中 dataframe 的各列進(jìn)行統(tǒng)計,包括求和、求均值等。

In?[2]:?df?=?pd.DataFrame({'A':?['a',?'b',?'a',?'c',?'a',?'c',?'b',?'c'],?...:????????????????????'B':?[2,?8,?1,?4,?3,?2,?5,?9],?...:????????????????????'C':?[102,?98,?107,?104,?115,?87,?92,?123]})...:?df...:?Out[2]:?A??B????C 0??a??2??102 1??b??8???98 2??a??1??107 3??c??4??104 4??a??3??115 5??c??2???87 6??b??5???92 7??c??9??123

按 A 列分組(groupby),獲取其他列的均值

df.groupby('A').mean()Out[3]:?B???????????C A????????????????? a??2.0??108.000000 b??6.5???95.000000 c??5.0??104.666667

按多列進(jìn)行分組(groupby)

df.groupby(['A','B']).mean()Out[4]:?C A?B????? a?1??1072??1023??115 b?5???928???98 c?2???874??1049??123

分組后選擇列進(jìn)行運算

分組后,可以選取單列數(shù)據(jù),或者多個列組成的列表(list)進(jìn)行運算

In?[5]:?df?=?pd.DataFrame([[1,?1,?2],?[1,?2,?3],?[2,?3,?4]],?columns=["A",?"B",?"C"])...:?df...:?Out[5]:?A??B??C 0??1??1??2 1??1??2??3 2??2??3??4In?[6]:?g?=?df.groupby("A")In?[7]:?g['B'].mean()?#?僅選擇B列Out[7]:? A 1????1.5 2????3.0 Name:?B,?dtype:?float64In?[8]:?g[['B',?'C']].mean()?#?選擇B、C列Out[8]:?B????C A?????????? 1??1.5??2.5 2??3.0??4.0

可以針對不同的列選用不同的聚合方法

In?[9]:?g.agg({'B':'mean',?'C':'sum'})Out[9]:?B??C A???????? 1??1.5??5 2??3.0??4

聚合方法

聚合方法有 size() 和 count() 。

size 跟 count 的區(qū)別:size 計數(shù)時包含 NaN 值,而 count 不包含 NaN值

In?[10]:?df?=?pd.DataFrame({"Name":["Alice",?"Bob",?"Mallory",?"Mallory",?"Bob"?,?"Mallory"],...:??????????????????"City":["Seattle",?"Seattle",?"Portland",?"Seattle",?"Seattle",?"Portland"],...:??????????????????"Val":[4,3,3,np.nan,np.nan,4]})...:?...:?df...:? Out[10]:?City?????Name??Val 0???Seattle????Alice??4.0 1???Seattle??????Bob??3.0 2??Portland??Mallory??3.0 3???Seattle??Mallory??NaN 4???Seattle??????Bob??NaN 5??Portland??Mallory??4.0

count()

In?[11]:?df.groupby(["Name",?"City"],?as_index=False)['Val'].count()Out[11]:?Name??????City??Val 0????Alice???Seattle????1 1??????Bob???Seattle????1 2??Mallory??Portland????2 3??Mallory???Seattle????0

size()

In?[12]:?df.groupby(["Name",?"City"])['Val'].size().reset_index(name='Size')Out[12]:?Name??????City??Size 0????Alice???Seattle?????1 1??????Bob???Seattle?????2 2??Mallory??Portland?????2 3??Mallory???Seattle?????1

分組運算方法 agg()

針對某列使用agg()時進(jìn)行不同的統(tǒng)計運算

In?[13]:?df?=?pd.DataFrame({'A':?list('XYZXYZXYZX'),?'B':?[1,?2,?1,?3,?1,?2,?3,?3,?1,?2],?...:????????????????????????????'C':?[12,?14,?11,?12,?13,?14,?16,?12,?10,?19]})...:?df...:? Out[13]:?A??B???C 0??X??1??12 1??Y??2??14 2??Z??1??11 3??X??3??12 4??Y??1??13 5??Z??2??14 6??X??3??16 7??Y??3??12 8??Z??1??10 9??X??2??19In?[14]:?df.groupby('A')['B'].agg({'mean':np.mean,?'standard?deviation':?np.std})Out[14]:?mean??standard?deviation A?????????????????????????????? X??2.250000????????????0.957427 Y??2.000000????????????1.000000 Z??1.333333????????????0.577350

針對不同的列應(yīng)用多種不同的統(tǒng)計方法

In?[15]:?df.groupby('A').agg({'B':[np.mean,?'sum'],?'C':['count',np.std]})Out[15]:?B?????????C??????????mean?sum?count???????std A?????????????????????????????? X??2.250000???9?????4??3.403430 Y??2.000000???6?????3??1.000000 Z??1.333333???4?????3??2.081666

分組運算方法 apply()

In?[16]:?df?=?pd.DataFrame({'A':?list('XYZXYZXYZX'),?'B':?[1,?2,?1,?3,?1,?2,?3,?3,?1,?2],?...:????????????????????????????'C':?[12,?14,?11,?12,?13,?14,?16,?12,?10,?19]})...:?df...:? Out[16]:?A??B???C 0??X??1??12 1??Y??2??14 2??Z??1??11 3??X??3??12 4??Y??1??13 5??Z??2??14 6??X??3??16 7??Y??3??12 8??Z??1??10 9??X??2??19In?[17]:?df.groupby('A').apply(np.mean)...:?#?跟下面的方法的運行結(jié)果是一致的...:?#?df.groupby('A').mean() Out[17]:?B??????????C A????????????????????? X??2.250000??14.750000 Y??2.000000??13.000000 Z??1.333333??11.666667

apply() 方法可以應(yīng)用 lambda 函數(shù),舉例如下:

In?[18]:?df.groupby('A').apply(lambda?x:?x['C']-x['B']) Out[18]:? A??? X??0????113?????96????139????17 Y??1????124????127?????9 Z??2????105????128?????9 dtype:?int64In?[19]:?df.groupby('A').apply(lambda?x:?(x['C']-x['B']).mean()) Out[19]:? A X????12.500000 Y????11.000000 Z????10.333333 dtype:?float64

分組運算方法 transform()

前面進(jìn)行聚合運算的時候,得到的結(jié)果是一個以分組名為 index 的結(jié)果對象。如果我們想使用原數(shù)組的 index 的話,就需要進(jìn)行 merge 轉(zhuǎn)換。transform(func, *args, **kwargs) 方法簡化了這個過程,它會把 func 參數(shù)應(yīng)用到所有分組,然后把結(jié)果放置到原數(shù)組的 index 上(如果結(jié)果是一個標(biāo)量,就進(jìn)行廣播):

In?[20]:?df?=?pd.DataFrame({'group1'?:??['A',?'A',?'A',?'A',...:????????????????????????????????'B',?'B',?'B',?'B'],...:????????????????????'group2'?:??['C',?'C',?'C',?'D',...:????????????????????????????????'E',?'E',?'F',?'F'],...:????????????????????'B'??????:??['one',?np.NaN,?np.NaN,?np.NaN,...:?????????????????????????????????np.NaN,?'two',?np.NaN,?np.NaN],...:????????????????????'C'??????:??[np.NaN,?1,?np.NaN,?np.NaN,...:????????????????????????????????np.NaN,?np.NaN,?np.NaN,?4]})???????????...:?df...:? Out[20]:?B????C?group1?group2 0??one??NaN??????A??????C 1??NaN??1.0??????A??????C 2??NaN??NaN??????A??????C 3??NaN??NaN??????A??????D 4??NaN??NaN??????B??????E 5??two??NaN??????B??????E 6??NaN??NaN??????B??????F 7??NaN??4.0??????B??????FIn?[21]:?df.groupby(['group1',?'group2'])['B'].transform('count') Out[21]:? 0????1 1????1 2????1 3????0 4????1 5????1 6????0 7????0 Name:?B,?dtype:?int64In?[22]:?df['count_B']=df.groupby(['group1',?'group2'])['B'].transform('count')...:?df...:? Out[22]:?B????C?group1?group2??count_B 0??one??NaN??????A??????C????????1 1??NaN??1.0??????A??????C????????1 2??NaN??NaN??????A??????C????????1 3??NaN??NaN??????A??????D????????0 4??NaN??NaN??????B??????E????????1 5??two??NaN??????B??????E????????1 6??NaN??NaN??????B??????F????????0 7??NaN??4.0??????B??????F????????0

上面運算的結(jié)果分析:{'group1':'A', 'group2':'C'} 的組合共出現(xiàn)3次,即 index為 0,1,2。對應(yīng) "B" 列的值分別是 "one","NaN","NaN",由于 count() 計數(shù)時不包括NaN值,因此 {'group1':'A', 'group2':'C'} 的 count 計數(shù)值為 1 。

transform() 方法會將該計數(shù)值在 dataframe 中所有涉及的 rows 都顯示出來(我理解應(yīng)該就進(jìn)行廣播)

將某列數(shù)據(jù)按數(shù)據(jù)值分成不同范圍段進(jìn)行分組(groupby)運算

In?[23]:?np.random.seed(0)...:?df?=?pd.DataFrame({'Age':?np.random.randint(20,?70,?100),?...:????????????????????'Sex':?np.random.choice(['Male',?'Female'],?100),?...:????????????????????'number_of_foo':?np.random.randint(1,?20,?100)})...:?df.head()...:? Out[23]:?Age?????Sex??number_of_foo 0???64??Female?????????????14 1???67??Female?????????????14 2???20??Female?????????????12 3???23????Male?????????????17 4???23??Female?????????????15

這里將 “Age” 列分成三類,有兩種方法可以實現(xiàn):

(a)bins=4

(b)bins=[19, 40, 65, np.inf]

In?[24]:?pd.cut(df['Age'],?bins=4) Out[24]:? ...In?[25]:?pd.cut(df['Age'],?bins=[19,40,65,np.inf])

分組結(jié)果范圍結(jié)果如下:

In?[26]:?age_groups?=?pd.cut(df['Age'],?bins=[19,40,65,np.inf])...:?df.groupby(age_groups).mean()

運行結(jié)果如下:

按‘Age’分組范圍和性別(sex)進(jìn)行制作交叉表

In?[27]:?pd.crosstab(age_groups,?df['Sex'])

運行結(jié)果如下:

往期推薦: 收藏 | 49 個 Python 學(xué)習(xí)資源我都逛哪些技術(shù)網(wǎng)站?(程序員必備58個網(wǎng)站匯總)肝!精心整理了 50 個數(shù)據(jù)源網(wǎng)站!

????分享、點贊、在看,給個三連擊唄!?????

總結(jié)

以上是生活随笔為你收集整理的玩转 Pandas 的 Groupby 操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91精品影视 | av老司机在线播放 | 熊猫成人网 | 国产在线小视频 | 香蕉久久久久久 | 国产成人av一区二区 | 欧美精品999 | 丁香婷婷激情 | 99热超碰 | 完全免费在线视频 | 成人久久精品人妻一区二区三区 | 亚洲资源网站 | 亚洲精品字幕 | 日本黄色的视频 | 中国老太婆性视频 | 农村妇女毛片精品久久久 | 97免费视频观看 | 99视频 | 91免费 看片| 国产伦精品一区二区三区照片91 | 成年人激情视频 | 日本色婷婷 | 色窝窝无码一区二区三区成人网站 | 男男毛片| 午夜婷婷 | 葵司av电影| 在线免费观看视频 | 欧美在线va| 激情开心站 | 成人三区| 久草热在线视频 | 国产操操操 | 五月天婷婷综合 | 青青草免费观看视频 | 亚洲20p | 伊人成综合 | 国产黄色一级片 | 蜜桃传媒一区二区亚洲av | 影音先锋亚洲成aⅴ人在 | 国产尤物av尤物在线看 | 亚洲国产成人无码av在线 | 99国产精品99久久久久久 | 亚洲综合一区中 | 亚洲av成人精品日韩在线播放 | 久久福利影视 | 噜啪啪| 精品福利在线 | 精品黑人一区二区三区在线观看 | 日韩久久一区二区 | h视频免费在线观看 | 特级av | 久久夜色精品国产欧美乱 | 日韩欧美综合在线 | 国产精视频 | 亚洲情热 | 一区二区国产精品视频 | 日日夜夜精品视频免费 | 毛片资源 | 天天干,天天爽 | 欧美日韩在线a | 成人av视屏 | 性欧美8khd高清极品 | 亚州av在线播放 | av在线黄 | 青青草原国产视频 | 成人1区2区| 在线国产91 | zzjj国产精品一区二区 | 久久久久久av无码免费看大片 | 91九色国产视频 | 我的好妈妈在线观看 | 樱桃av| 久久久久久av无码免费网站 | 成年女人毛片 | 91国内揄拍国内精品对白 | 成人18在线| 日日日日干 | 中文字幕一区二区三区人妻电影 | www网站在线观看 | av高清在线 | jzzijzzij亚洲成熟少妇 | 美国黄色片网站 | 日韩欧美字幕 | 日本内谢少妇xxxxx少交 | 国产午夜不卡 | 中文字幕一区二区三 | 欧美在线播放一区二区 | 国产精品亚洲第一 | 日韩二级片 | 久久精品国产欧美亚洲人人爽 | 欧美aaaaaa| 少妇高潮一69aⅹ | 国产一区999 | 久久精品欧美 | 精品视频在线播放 | 国产资源在线播放 | 久久久久久久久精 | 伊人伊色 | 色七七视频 |