国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解Pandas分組函數(shù)groupby

這篇具有很好參考價值的文章主要介紹了詳解Pandas分組函數(shù)groupby。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在數(shù)據(jù)分析時,經(jīng)常需要將數(shù)據(jù)分成不同的群組,pandas中的groupby()函數(shù)可以完美地完成各種分組操作。

分組是根據(jù)DataFrame/Series的某個字段值,將該字段的值相等的行/列分到同一組中,每一個小組是一個新的DataFrame或Series。

groupby()也可以按DataFrame中的多個字段分組,當多個字段的值都相等時分到同一組。

groupby()經(jīng)常與批處理函數(shù)apply()、聚合函數(shù)agg()等配合使用,實現(xiàn)對數(shù)據(jù)的多元處理。

groupby用法和參數(shù)介紹


groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=no_default, observed=False, dropna=True):

  • by: 指定根據(jù)哪個/哪些字段分組,默認值是None,按多個字段分組時傳入列表。by參數(shù)可以按位置參數(shù)的方式傳入。

  • axis: 設(shè)置按列分組還是按行分組,0或index表示按列分組,1或columns表示按行分組,默認值為0。

  • level: 當DataFrame的索引為多重索引時,level參數(shù)指定用于分組的索引,可以傳入多重索引中索引的下標(0,1...)或索引名,多個用列表傳入。

level參數(shù)不能與by參數(shù)同時使用,如果兩者同時存在,當by參數(shù)傳入的是多重索引中的索引,則level不生效,當by參數(shù)傳入的是DataFrame的列名,則報錯。

  • as_index: 分組結(jié)果默認將分組列的值作為索引,如果按單列分組,結(jié)果默認是單索引,如果按多列分組,結(jié)果默認是多重索引。將as_index設(shè)置為False可以重置索引(0,1...)。

  • sort: 結(jié)果按分組列的值升序排列,將sort設(shè)置為False則不排序,可以提升性能。

  • dropna: 默認情況下,分組列的NaN在分組結(jié)果中不保留,將dropna設(shè)置為False,可以保留NaN分組。

其他三個參數(shù)不用關(guān)注,group_keys參數(shù)在源碼中未使用,squeeze參數(shù)因為類型不兼容,官方已棄用,observed參數(shù)表示重設(shè)索引時,保留創(chuàng)建的全NaN行。

分組對象的內(nèi)部結(jié)構(gòu)


# coding=utf-8
import pandas as pd
import numpy as np

vip_df = pd.DataFrame(
    {'isVip': ['vip', 'svip', 'member', 'vip', 'member', 'vip', 'svip'],
     'gender': ['male', 'female', 'female', 'female', 'male', 'female', 'male'],
     'age': [25, 30, 40, 25, 40, 18, 30],
     'vipLevel': ['LV2', 'LV5', np.nan, 'LV3', 'LV2', 'LV2', 'LV3'],
     'growValue': [180, 425, np.nan, 288, 190, 110, 240]}
)
print(vip_df)
grouped = vip_df.groupby('isVip')
print(grouped)
    isVip  gender  age vipLevel  growValue
0     vip    male   25      LV2      180.0
1    svip  female   30      LV5      425.0
2  member  female   40      NaN        NaN
3     vip  female   25      LV3      288.0
4  member    male   40      LV2      190.0
5     vip  female   18      LV2      110.0
6    svip    male   30      LV3      240.0
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001C3E81D1370>

groupby()分組得到的是一個DataFrameGroupBy對象,直接打印DataFrameGroupBy對象只能看到它的內(nèi)存地址,看不到內(nèi)部的結(jié)構(gòu)。

for name, group in grouped:
    print(name)
    print(group)
member
    isVip  gender  age vipLevel  growValue
2  member  female   40      NaN        NaN
4  member    male   40      LV2      190.0
svip
  isVip  gender  age vipLevel  growValue
1  svip  female   30      LV5      425.0
6  svip    male   30      LV3      240.0
vip
  isVip  gender  age vipLevel  growValue
0   vip    male   25      LV2      180.0
3   vip  female   25      LV3      288.0
5   vip  female   18      LV2      110.0
for group in grouped:
    print(group)
    print(type(group), type(group[0]), type(group[1]))
('member',     isVip  gender  age vipLevel  growValue
2  member  female   40      NaN        NaN
4  member    male   40      LV2      190.0)
<class 'tuple'> <class 'str'> <class 'pandas.core.frame.DataFrame'>
('svip',   isVip  gender  age vipLevel  growValue
1  svip  female   30      LV5      425.0
6  svip    male   30      LV3      240.0)
<class 'tuple'> <class 'str'> <class 'pandas.core.frame.DataFrame'>
('vip',   isVip  gender  age vipLevel  growValue
0   vip    male   25      LV2      180.0
3   vip  female   25      LV3      288.0
5   vip  female   18      LV2      110.0)
<class 'tuple'> <class 'str'> <class 'pandas.core.frame.DataFrame'>

DataFrameGroupBy是一個可迭代對象,可以轉(zhuǎn)換成list打印,也可以直接遍歷打印出來。遍歷出來的是一個個元組,每個元組對應(yīng)一個分組,元組的第一個元素與分組列里的值對應(yīng),元組的第二個元素是分到當前小組的數(shù)據(jù),是一個DataFrame。

DataFrameGroupBy對象的內(nèi)部結(jié)構(gòu)為:[(分組名1, 子DataFrame1), (分組名2, 子DataFrame2), ...],相當于groupby()將DataFrame按字段值分成了多個小的DataFrame,然后將字段值和小的DataFrame用元組的方式保存在DataFrameGroupBy對象中。

print(grouped.groups)
group_name = [gn for gn in grouped.groups.keys()]
print(group_name)
group = grouped.get_group(group_name[2])
print('-'*40, '\n', group, sep='')
{'member': [2, 4], 'svip': [1, 6], 'vip': [0, 3, 5]}
['member', 'svip', 'vip']
----------------------------------------
  isVip  gender  age vipLevel  growValue
0   vip    male   25      LV2      180.0
3   vip  female   25      LV3      288.0
5   vip  female   18      LV2      110.0

分組對象的groups屬性可以返回分組信息,結(jié)果是一個形似字典的對象,由分組名和此分組數(shù)據(jù)在原DataFrame中的行索引組成。

借用groups可以提取出所有分組的分組名,分組對象的get_group()方法可以返回指定分組名的子DataFrame。

按多重索引分組


vip_multi_df = vip_df.set_index(['isVip', 'gender'])
print('-'*40, '\n', vip_multi_df, sep='')
----------------------------------------
               age vipLevel  growValue
isVip  gender                         
vip    male     25      LV2      180.0
svip   female   30      LV5      425.0
member female   40      NaN        NaN
vip    female   25      LV3      288.0
member male     40      LV2      190.0
vip    female   18      LV2      110.0
svip   male     30      LV3      240.0
# 按多重索引中的指定索引進行分組
grouped = vip_multi_df.groupby(level='isVip')
print('-'*40, '\n', grouped.mean(), sep='')
# 按多重索引中除指定索引之外的索引分組
grouped = vip_multi_df.groupby(level=vip_multi_df.index.names.difference(['gender']))
print('-'*40, '\n', grouped.mean(), sep='')
# 按多重索引中的多個索引分組
grouped = vip_multi_df.groupby(level=[0, 1])
print('-'*40, '\n', grouped.mean(), sep='')
----------------------------------------
              age   growValue
isVip                        
member  40.000000  190.000000
svip    30.000000  332.500000
vip     22.666667  192.666667
----------------------------------------
              age   growValue
isVip                        
member  40.000000  190.000000
svip    30.000000  332.500000
vip     22.666667  192.666667
----------------------------------------
                age  growValue
isVip  gender                 
member female  40.0        NaN
       male    40.0      190.0
svip   female  30.0      425.0
       male    30.0      240.0
vip    female  21.5      199.0
       male    25.0      180.0

level參數(shù)用于設(shè)置按多重索引中的指定索引分組,level傳入的方式可以是索引name,也可以是索引在多重索引中的下標,還可以是排除某個索引外的其他索引。指定多個時用列表的方式傳入。

grouped = vip_multi_df.groupby('gender')
print('-'*40, '\n', grouped.mean(), sep='')
grouped = vip_multi_df.groupby(['gender', 'age'])
print('-'*40, '\n', grouped.mean(), sep='')
----------------------------------------
              age   growValue
gender                       
female  28.250000  274.333333
male    31.666667  203.333333
----------------------------------------
            growValue
gender age           
female 18       110.0
       25       288.0
       30       425.0
       40         NaN
male   25       180.0
       30       240.0
       40       190.0

多重索引中的索引也可以傳給groupby()的by參數(shù),分組結(jié)果與將多重索引作為DataFrame的列是一樣的。

如果用DataFrame的列作為分組列,多重索引會被轉(zhuǎn)換成列保留在結(jié)果中。也可以用多重索引中的索引與列一起組合分組,相當于先對DataFrame重設(shè)索引再分組。

重置結(jié)果的索引


grouped = vip_multi_df.groupby(['isVip', 'gender'])
print('-'*40, '\n', grouped.mean(), sep='')
# 重設(shè)索引
grouped = vip_multi_df.groupby(['isVip', 'gender'], as_index=False)
print('-'*40, '\n', grouped.mean(), sep='')
----------------------------------------
                age  growValue
isVip  gender                 
member female  40.0        NaN
       male    40.0      190.0
svip   female  30.0      425.0
       male    30.0      240.0
vip    female  21.5      199.0
       male    25.0      180.0
----------------------------------------
    age  growValue
0  40.0        NaN
1  40.0      190.0
2  30.0      425.0
3  30.0      240.0
4  21.5      199.0
5  25.0      180.0

分組結(jié)果的索引默認是分組列的值,將as_index設(shè)置為False可以重置索引,相當于先分組再調(diào)用reset_index()函數(shù)。

結(jié)果是否排序


grouped = vip_df.groupby('isVip')
print('-'*40, '\n', grouped.mean(), sep='')
grouped = vip_df.groupby('isVip', sort=False)
print('-'*40, '\n', grouped.mean(), sep='')
----------------------------------------
              age   growValue
isVip                        
member  40.000000  190.000000
svip    30.000000  332.500000
vip     22.666667  192.666667
----------------------------------------
              age   growValue
isVip                        
vip     22.666667  192.666667
svip    30.000000  332.500000
member  40.000000  190.000000

groupby()默認對結(jié)果按分組列的值升序排列,如果將sort參數(shù)修改為False,則不排序,保留原DataFrame中的順序,不排序可以提升性能。

是否保留空值


grouped = vip_df.groupby('vipLevel')
print('-'*40, '\n', grouped.mean(), sep='')
grouped = vip_df.groupby('vipLevel', dropna=False)
print('-'*40, '\n', grouped.mean(), sep='')
----------------------------------------
                age  growValue
vipLevel                      
LV2       27.666667      160.0
LV3       27.500000      264.0
LV5       30.000000      425.0
----------------------------------------
                age  growValue
vipLevel                      
LV2       27.666667      160.0
LV3       27.500000      264.0
LV5       30.000000      425.0
NaN       40.000000        NaN

當分組列有空值(NaN)時,默認的分組結(jié)果中不保留NaN分組,將dropna參數(shù)修改為False,正常保留NaN分組。

提取分組結(jié)果的指定列


grouped = vip_df.groupby('isVip', dropna=False)
print('-'*40, '\n', grouped['gender'], sep='')
for name, group in grouped['gender']:
    print(name)
    print(group)
----------------------------------------
<pandas.core.groupby.generic.SeriesGroupBy object at 0x00000285CA1B0790>
member
2    female
4      male
Name: gender, dtype: object
svip
1    female
6      male
Name: gender, dtype: object
vip
0      male
3    female
5    female
Name: gender, dtype: object

從groupby()分組結(jié)果中取一列,得到的是一個SeriesGroupBy對象,直接打印SeriesGroupBy對象只能看到它的內(nèi)存地址,看不到內(nèi)部的結(jié)構(gòu)。

SeriesGroupBy的內(nèi)部結(jié)構(gòu)與DataFrameGroupBy相似,SeriesGroupBy對象的內(nèi)部結(jié)構(gòu)為:[(分組名1, 子Series1), (分組名2, 子Series2), ...],因此SeriesGroupBy也可以轉(zhuǎn)換成list打印,也可以遍歷取出每一個元素。

grouped = vip_df['gender'].groupby(vip_df['isVip'])
for name, group in grouped:
    print(name)
    print(group)
member
2    female
4      male
Name: gender, dtype: object
svip
1    female
6      male
Name: gender, dtype: object
vip
0      male
3    female
5    female
Name: gender, dtype: object

也可以先指定需要獲取的列,再按DataFrame的另一個列進行分組,結(jié)果與先分組再獲取指定列相同。

以上就是pandas中g(shù)roupby()函數(shù)的用法介紹和分析,本文都是用DataFrame舉例,Series的用法相似,不重復(fù)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-780713.html

到了這里,關(guān)于詳解Pandas分組函數(shù)groupby的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • pandas數(shù)據(jù)分析——groupby得到分組后的數(shù)據(jù)

    pandas數(shù)據(jù)分析——groupby得到分組后的數(shù)據(jù)

    Pandas怎樣實現(xiàn)groupby聚合后字符串列的合并(四十) pandas—groupby如何得到分組里的數(shù)據(jù) 在處理時間序列的數(shù)據(jù)中,有時候會遇到有些日期的數(shù)據(jù)缺失的情況,這時候可以用pandas的 date_range 函數(shù)快速補齊缺失日期,再根據(jù)實際情況補齊缺失值。 常用參數(shù)為: start :指定生成時

    2024年02月11日
    瀏覽(22)
  • Java8 Stream分組groupBy后,取單一字段值、取列表第一個值方式

    java8 Stream中g(shù)roupBy的拓展用法。 取單一字段值、取列表第一個值方式

    2024年02月14日
    瀏覽(21)
  • python DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)

    python DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)

    df = pd.DataFrame(data=data, index=index, columns=columns) print(df) print(“=================================================”) df1 = df.groupby([‘class_1’, ‘class_2’]).sum() # 分組統(tǒng)計求和 print(df1) 1.3 對DataFrameGroupBy對象列名索引(對指定列統(tǒng)計計算) 其中,df.groupby(‘class_1’)得到一個DataFrameGroupBy對象,

    2024年04月25日
    瀏覽(40)
  • Python中g(shù)roupby函數(shù)詳解(非常容易懂)

    Python中g(shù)roupby函數(shù)詳解(非常容易懂)

    groupby函數(shù)主要的作用是進行數(shù)據(jù)的分組以及分組后地組內(nèi)運算! 于數(shù)據(jù)的分組和分組運算主要是指groupby函數(shù)的應(yīng)用,具體函數(shù)的規(guī)則如下: 舉例如下: 上面語句的功能是輸出表格所有數(shù)據(jù)中不同地區(qū)不同類型的評分數(shù)據(jù)平均值。 結(jié)果為: 首先,我們有一個變量data,數(shù)據(jù)

    2024年01月16日
    瀏覽(23)
  • sql 分組討論,二級分組(非2個字段分組),使用 窗口函數(shù)和普通分組實現(xiàn)

    先按照一個字段分組,在按照 第二個字段分組。 之后,如果 這個 二級分組中的數(shù)據(jù),是 1條的。就篩選出來。 比如: 先按照 站點分組,再按照 設(shè)備分組, 即:如果站點上配置了2個設(shè)備。就篩選出來。 然后:這2個設(shè)備 都必須是屏幕 查出配置了2個設(shè)備的站點 要求 這兩個

    2024年02月13日
    瀏覽(16)
  • java根據(jù)分組函數(shù)GroupingBy進行多個條件組合分組

    在SQL中經(jīng)常會用到分組,我們也常常遇到一些組合分組的場景。 java8分組 傳統(tǒng)寫法(單個字段分組) 場景:根據(jù) 城市 進行分組 使用的是方法引用:User::getCity 來完成分組 java8分組 傳統(tǒng)寫法(多個字段分組) 場景:根據(jù) 城市,性別進行分組 一般的寫法會是下面的這種寫法,

    2023年04月19日
    瀏覽(18)
  • pandas——groupby操作

    pandas——groupby操作

    作者:i阿極 作者簡介:Python領(lǐng)域新星作者、多項比賽獲獎?wù)撸翰┲鱾€人首頁 ??????如果覺得文章不錯或能幫助到你學(xué)習(xí),可以點贊??收藏??評論??+關(guān)注哦!?????? ??????如果有小伙伴需要數(shù)據(jù)集和學(xué)習(xí)交流,文章下方有交流學(xué)習(xí)區(qū)!一起學(xué)習(xí)進步!?? 熟練掌握

    2024年02月07日
    瀏覽(22)
  • pandas筆記:groupby整理

    pandas筆記:groupby整理

    按照Type 聚類,聚類后將同組的Kg屬性合并,求均值 聚合的內(nèi)容可以是 max, min, mean, unique(唯一值), nunique(唯一值數(shù)量),lambda 表達式 ?? ? ?按照Type 聚類,聚類后將同組的Kg、Depth屬性合并,求均值 ? 重命名的名字=(需要操作的列名,需要的操作名) ? ? ? 參考內(nèi)容:

    2024年02月16日
    瀏覽(51)
  • Mysql 合并多個分組。GROUP_CONCAT 函數(shù) 及其平替函數(shù)

    GROUP_CONCAT 函數(shù)用于將一個分組內(nèi)的多行數(shù)據(jù)合并成一個字符串,并以指定的分隔符進行分隔。常用于需要將一個分組內(nèi)的多條數(shù)據(jù)以字符串的形式展示的情況。語法如下: GROUP_CONCAT(expr [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [, expr ...]] [SEPARATOR str_val]) 其中,expr 表示要

    2024年02月02日
    瀏覽(19)
  • 【Python】Pandas Groupby操作的25個示例

    【Python】Pandas Groupby操作的25個示例

    在日常的數(shù)據(jù)分析中,經(jīng)常需要將數(shù)據(jù)根據(jù)某個(多個)字段劃分為不同的群體(group)進行分析,如電商領(lǐng)域?qū)⑷珖目備N售額根據(jù)省份進行劃分,分析各省銷售額的變化情況,社交領(lǐng)域?qū)⒂脩舾鶕?jù)畫像(性別、年齡)進行細分,研究用戶的使用情況和偏好等。在Pandas中,

    2024年02月03日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包