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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键

發(fā)布時(shí)間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hadley Wickham(許多熱門R語(yǔ)言包的作者)創(chuàng)造了一個(gè)用于表示分組運(yùn)算的術(shù)語(yǔ)"split-apply-combine"(拆分-應(yīng)用-合并),這個(gè)詞很好的描述了整個(gè)過程。分組運(yùn)算的第一個(gè)階段,pandas對(duì)象(無論是Series、DataFrame還是其他的)中的數(shù)據(jù)會(huì)根據(jù)你所提供的一個(gè)或多個(gè)鍵被拆分(split)為多組。拆分操作是在對(duì)象的特定軸上執(zhí)行的。例如,DataFrame可以在其行(axis=0)或列(axis=1)上進(jìn)行分組。然后,將一個(gè)函數(shù)應(yīng)用(apply)到各個(gè)分組并產(chǎn)生一個(gè)新值。最后,所有這些函數(shù)的執(zhí)行結(jié)果會(huì)被合并(combine)到最終的結(jié)果對(duì)象中去。

PART I. groupby方法PART II. GroupBy對(duì)象i) GroupBy對(duì)象ii) 對(duì)/GroupBy對(duì)象進(jìn)行迭代和轉(zhuǎn)化iii)GroupBy對(duì)象的常用方法PART II. groupby方法的分組鍵i) 列名作為分組鍵df.groupby('key1').mean()df.groupby(['key1','key2']).mean()ii) 列表作為分組鍵df.groupby(l)['size'].count()iii) 數(shù)組作為分組鍵df.groupby([states,year])['data1'].mean()iv) 字典作為分組鍵df.groupby(mapping, axis=1).sum()v) Series作為分組鍵people.groupby(map_series, axis=1).count()df.groupby([df['key1'],df['key2']]).mean()vi) 索引作為分組鍵df.groupby(level='cty',axis=1).count()df.groupby(level=0,axis=1).count()vii) dtype作為分組鍵df.groupby(df.dtypes,axis=1).size()viii)函數(shù)作為分組鍵people.groupby(len).sum()df.groupby(lambda x: x.day)['volume'].sum()ix) 函數(shù)跟數(shù)組、列表、字典、Series混合使用作為分組鍵people.groupby([len,key_list]).sum()

PART I . groupby方法

groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)by : mapping, function, label, or list of labelsUsed to determine the groups for the groupby.If ``by`` is a function, it's called on each value of the object'sindex. If a dict or Series is passed, the Series or dict VALUESwill be used to determine the groups (the Series' values are firstaligned; see ``.align()`` method). If an ndarray is passed, thevalues are used as-is determine the groups. A label or list oflabels may be passed to group by the columns in ``self``. Noticethat a tuple is interpreted a (single) key.axis : {0 or 'index', 1 or 'columns'}, default 0Split along rows (0) or columns (1).level : int, level name, or sequence of such, default NoneIf the axis is a MultiIndex (hierarchical), group by a particularlevel or levels.as_index : bool, default TrueFor aggregated output, return object with group labels as theindex. Only relevant for DataFrame input. as_index=False iseffectively "SQL-style" grouped output.sort : bool, default TrueSort group keys. Get better performance by turning this off.Note this does not influence the order of observations within eachgroup. Groupby preserves the order of rows within each group.group_keys : bool, default TrueWhen calling apply, add group keys to index to identify pieces.squeeze : bool, default FalseReduce the dimensionality of the return type if possible,otherwise return a consistent type.observed : bool, default FalseThis only applies if any of the groupers are Categoricals.If True: only show observed values for categorical groupers.If False: show all values for categorical groupers.重點(diǎn)參數(shù):by axis level as_index

PART II. GroupBy對(duì)象

i)GroupBy對(duì)象

假設(shè)想要按key1進(jìn)行分組,并計(jì)算data1列的平均值。實(shí)現(xiàn)該功能的方式有很多,而這里要用的是:訪問data1,并根據(jù)key1調(diào)用groupby:

變量grouped是一個(gè)SeriesGroupBy對(duì)象, 變量grouped2是一個(gè)DataFrameGroupBy對(duì)象。它們實(shí)際上還沒有進(jìn)行任何計(jì)算,只是含有一些有關(guān)分組鍵'key1'的中間數(shù)據(jù)。換言之,該對(duì)象已經(jīng)有了接下來對(duì)各分組執(zhí)行運(yùn)算所需的信息。

ii)對(duì)/GroupBy對(duì)象進(jìn)行迭代和轉(zhuǎn)化

GroupBy對(duì)象支持迭代,可以產(chǎn)生一組二元元組(由分組名和數(shù)據(jù)塊組成)

分組鍵為單列

分組鍵為多列

通過列表生成式或list()方法可以把groupby對(duì)象,轉(zhuǎn)換為分組名+數(shù)據(jù)塊組成的元組的列表,其實(shí)我們還可以把groupby對(duì)象轉(zhuǎn)換為字典

iii)GroupBy對(duì)象的常用方法

GroupBy對(duì)象的常用方法除了常見的sum、mean、count等優(yōu)化好的聚合函數(shù),還有返回不同分組大小的Series的簡(jiǎn)便方法size(),除此之外還可以對(duì)groupby對(duì)象傳入自定義的函數(shù)(agg/apply)。這部分的內(nèi)容將放在下面一篇詳細(xì)展開。

例如,我們可以調(diào)用GroupBy的mean和count方法來計(jì)算分組平均值和分組計(jì)數(shù):

groupby對(duì)象的size方法

groupby對(duì)象的size方法可以返回一個(gè)含有分組大小的Series

對(duì)groupby對(duì)象調(diào)用count不行嗎?倒也不是不行,就是格式不太友好。

所以還是size方法好

PART III. groupby方法的分組鍵

分組鍵的形式:

  • 列表或數(shù)組,其長(zhǎng)度與待分組的軸一樣
  • 表示DataFrame某個(gè)列名的值
  • 字典或Series,給出待分組軸上的值與分組名之間的對(duì)應(yīng)關(guān)系
  • 函數(shù),用于處理軸索引或索引中的各個(gè)標(biāo)簽

即 列表/數(shù)組、列名、字典、Series、函數(shù)

注意,后面三種都只是快捷方式,最終目的都是產(chǎn)生一組用于拆分對(duì)象的值,而且任何東西最終都會(huì)被轉(zhuǎn)換為數(shù)組。

i)列名作為分組鍵

可以用【一個(gè)列名字符串或一個(gè)列名字符串的列表】選取部分列進(jìn)行聚合

對(duì)于由DataFrame產(chǎn)生的GroupBy對(duì)象,如果用一個(gè)列名字符串或一個(gè)列名字符串的列表對(duì)其進(jìn)行索引,就能實(shí)現(xiàn)選取部分列進(jìn)行聚合的目的。尤其對(duì)于大數(shù)據(jù)集,很可能只需要對(duì)部分列進(jìn)行聚合。

df.groupby('key1')['data1'] 等價(jià)于 df['data1'].groupby(df['key1']) df.groupby('key1')[['data2']] 等價(jià)于 df[['data2']].groupby(df['key1')]

在執(zhí)行df.groupby('key1').mean()時(shí),結(jié)果中沒有key2列。這是因?yàn)閐f['key2']不是數(shù)值數(shù)據(jù)(俗稱“麻煩列”),所以被從結(jié)果中排除了。默認(rèn)情況下,所有數(shù)值列都會(huì)被聚合,雖然有時(shí)候可能會(huì)被過濾為一個(gè)子集。

聚合單列并以DataFrame形式得到結(jié)果

聚合單列并以Series形式得到結(jié)果

ii)列表作為分組鍵

iii)數(shù)組作為分組鍵

iv)字典作為分組鍵

列的分組關(guān)系如下:

只需把這個(gè)包含分組關(guān)系的字典傳給groupby即可:

v)Series作為分組鍵

Series也有字典同樣的功能,它可以被看作一個(gè)固定大小的映射。對(duì)于上面那個(gè)例子,如果用Series作為分組鍵,則pandas會(huì)檢查Series以確保其索引跟分組軸是對(duì)齊的。

多個(gè)Series作為分組鍵

.mean()的調(diào)用過程先略去不講。這里最重要的是,數(shù)據(jù)(Series)根據(jù)分組鍵進(jìn)行了聚合,產(chǎn)生了一個(gè)新的Series,其索引為唯一值。之所以結(jié)果中索引的名稱為key1、key2,是因?yàn)樵糄ataFrame的列df['key1']、df['key2']就叫這個(gè)名字。

通過對(duì)兩個(gè)鍵進(jìn)行分組,得到的Series具有一個(gè)層次化索引(由唯一的鍵值對(duì)組成),reshape一下:

vi)索引作為分組鍵

向level關(guān)鍵字傳入級(jí)別編號(hào)或名稱,根據(jù)索引級(jí)別分組

層次化索引最方便的地方在于它能夠根據(jù)索引級(jí)別進(jìn)行聚合。要實(shí)現(xiàn)該目的,通過level關(guān)鍵字傳入級(jí)別編號(hào)或名稱即可:

vii)dtype作為分組鍵

在axis=1上根據(jù)dtype對(duì)列進(jìn)行分組

viii)函數(shù)作為分組鍵

相較于字典或Series,Python函數(shù)在定義分組映射關(guān)系時(shí)可以更有創(chuàng)意且更為抽象。任何被當(dāng)作分組鍵的函數(shù)都會(huì)在各個(gè)索引值上被調(diào)用一次,其返回值就會(huì)被用作分組名稱。( If ``by`` is a function, it's called on each value of the object's index.)

假設(shè)我們現(xiàn)在想根據(jù)人名的長(zhǎng)度進(jìn)行分組:

函數(shù)作為分組鍵很靈活,下面是12月1日1分鐘K線的數(shù)據(jù),求這一天的總成交量,除了用df['volume'].sum(),還可以用將lambda函數(shù)作為分組鍵進(jìn)行聚合的方法實(shí)現(xiàn)

>>>path = r"C:UsersbyqpzDesktop現(xiàn)貨策略現(xiàn)貨高頻新策略12.01.csv" >>>df = pd.read_csv(path, engine='python',encoding='utf_8_sig',index_col='time',parse_dates=True) >>>df['volume'].sum() 119939049.16099769 >>>df.groupby(lambda x: x.day)['volume'].sum() 1 1.199390e+08 Name: volume, dtype: float64

ix)函數(shù)跟數(shù)組、列表、字典、Series混合使用作為分組鍵

混合使用不是問題,因?yàn)槿魏螙|西最終都會(huì)被轉(zhuǎn)換為數(shù)組:

總結(jié)

以上是生活随笔為你收集整理的collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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