校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > pandas group分組與agg聚合的實例

pandas group分組與agg聚合的實例

熱門標簽:工廠智能電話機器人 400電話申請服務商選什么 在哪里辦理400電話號碼 清遠360地圖標注方法 原裝電話機器人 西藏智能外呼系統(tǒng)五星服務 平頂山外呼系統(tǒng)免費 江蘇客服外呼系統(tǒng)廠家 千陽自動外呼系統(tǒng)

如下:

import pandas as pd
 
df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'], 
     'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
     'Age':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]})

構造的數(shù)據(jù)如下:

 Age Country Income
0 5000 China 10000
1 4321 China 10000
2 1234 India 5000
3 4010 India 5002
4 250 America 40000
5 250 Japan 50000
6 4500 China 8000
7 4321 India 5000

分組

單列分組

df_gb = df.groupby('Country')
for index, data in df_gb:
 print(index)
 print(data)

輸出

America
 Age Country Income
4 250 America 40000
China
 Age Country Income
0 5000 China 10000
1 4321 China 10000
6 4500 China 8000
India
 Age Country Income
2 1234 India 5000
3 4010 India 5002
7 4321 India 5000
Japan
 Age Country Income
5 250 Japan 50000

多列分組

df_gb = df.groupby(['Country', 'Income'])
for (index1, index2), data in df_gb:
 print((index1, index2))
 print(data)

輸出

('America', 40000)
 Age Country Income
4 250 America 40000
('China', 8000)
 Age Country Income
6 4500 China 8000
('China', 10000)
 Age Country Income
0 5000 China 10000
1 4321 China 10000
('India', 5000)
 Age Country Income
2 1234 India 5000
7 4321 India 5000
('India', 5002)
 Age Country Income
3 4010 India 5002
('Japan', 50000)
 Age Country Income
5 250 Japan 50000

聚合

對分組后數(shù)據(jù)進行聚合

默認情況對分組之后其他列進行聚合

df_agg = df.groupby('Country').agg(['min', 'mean', 'max'])
print(df_agg)

輸出

 Age     Income      
   min   mean max min   mean max
Country              
America 250 250.000000 250 40000 40000.000000 40000
China 4321 4607.000000 5000 8000 9333.333333 10000
India 1234 3188.333333 4321 5000 5000.666667 5002
Japan  250 250.000000 250 50000 50000.000000 50000

對分組后的部分列進行聚合

某些情況,只需要對部分數(shù)據(jù)進行不同的聚合操作,可以通過字典來構建

num_agg = {'Age':['min', 'mean', 'max']}
print(df.groupby('Country').agg(num_agg))

輸出

 Age     
   min   mean max
Country       
America 250 250.000000 250
China 4321 4607.000000 5000
India 1234 3188.333333 4321
Japan  250 250.000000 250
num_agg = {'Age':['min', 'mean', 'max'], 'Income':['min', 'max']}
print(df.groupby('Country').agg(num_agg))

輸出

  Age     Income  
   min   mean max min max
Country          
America 250 250.000000 250 40000 40000
China 4321 4607.000000 5000 8000 10000
India 1234 3188.333333 4321 5000 5002
Japan  250 250.000000 250 50000 50000

補充:pandas——很全的groupby、agg,對表格數(shù)據(jù)分組與統(tǒng)計

我這篇groupby寫的不好。太復雜了。其實實際上經常用的就那么幾個。舉個例子,把常用的往那一放就很容易理解和拿來用了。日后再寫一篇。

groupby功能:分組

groupby + agg(聚集函數(shù)們): 分組后,對各組應用一些函數(shù),如'sum',‘mean',‘max',‘min'…

groupby默認縱方向上分組,axis=0

DataFrame
import pandas as pd
import numpy as np
 df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
     'key2':['one', 'two', 'one', 'two', 'one'],
     'data1':np.random.randn(5),
     'data2':np.random.randn(5)})
print(df)
  data1  data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two
4 -0.297191 0.954447 a one

分組,并對分組進行迭代

list(df.groupby(['key1']))#list后得到:[(group1),(group2),......]
[('a',  data1  data2 key1 key2
 0 -0.410122 0.247895 a one
 1 -0.627470 -0.989268 a two
 4 -0.297191 0.954447 a one), ('b',  data1  data2 key1 key2
 2 0.179488 -0.054570 b one
 3 -0.299878 -1.640494 b two)]

list后得到:[(group1),(group2),…]

每個數(shù)據(jù)片(group)格式: (name,group)元組

1. 按key1(一個列)分組,其實是按key1的值

groupby對象支持迭代,產生一組二元元組:(分組名,數(shù)據(jù)塊),(分組名,數(shù)據(jù)塊)…

for name,group in df.groupby(['key1']):
 print(name)
 print(group)
a
  data1  data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
4 -0.297191 0.954447 a one
b
  data1  data2 key1 key2
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two

2. 按[key1, key2](多個列)分組

對于多重鍵,產生的一組二元元組:((k1,k2),數(shù)據(jù)塊),((k1,k2),數(shù)據(jù)塊)…

第一個元素是由鍵值組成的元組

for name,group in df.groupby(['key1','key2']):
 print(name) #name=(k1,k2)
 print(group)
('a', 'one')
  data1  data2 key1 key2
0 -0.410122 0.247895 a one
4 -0.297191 0.954447 a one
('a', 'two')
  data1  data2 key1 key2
1 -0.62747 -0.989268 a two
('b', 'one')
  data1 data2 key1 key2
2 0.179488 -0.05457 b one
('b', 'two')
  data1  data2 key1 key2
3 -0.299878 -1.640494 b two

3. 按函數(shù)分組

4. 按字典分組

5. 按索引級別分組

6.將函數(shù)跟數(shù)組、列表、字典、Series混合使用也不是問題,因為任何東西最終都會被轉換為數(shù)組

將這些數(shù)據(jù)片段做成字典

dict(list(df.groupby(['key1'])))#dict(list())
{'a':  data1  data2 key1 key2
 0 -0.410122 0.247895 a one
 1 -0.627470 -0.989268 a two
 4 -0.297191 0.954447 a one, 'b':  data1  data2 key1 key2
 2 0.179488 -0.054570 b one
 3 -0.299878 -1.640494 b two}

分組后進行一些統(tǒng)計、計算等

1. 分組后,返回一個含有分組大小的Series

按key1分組

df.groupby(['key1']).size()
key1
a 3
b 2
dtype: int64
dict(['a1','x2','e3'])



{'a': '1', 'e': '3', 'x': '2'}

按[key1,key2]分組

df.groupby(['key1','key2']).size()
key1 key2
a  one  2
  two  1
b  one  1
  two  1
dtype: int64

2. 對data1按key1進行分組,并計算data1列的平均值

df['data1'].groupby(df['key1']).mean()
#groupby沒有進行任何的計算。它只是進行了一個分組
key1
a -0.444928
b -0.060195
Name: data1, dtype: float64
df.groupby(['key1'])['data1'].mean()#理解:對df按key1分組,并計算分組后df['data1']的均值
#等價于:df.groupby(['key1']).data1.mean()
key1
a -0.444928
b -0.060195
Name: data1, dtype: float64

說明:

groupby沒有進行任何的計算。它只是進行了一個分組。

數(shù)據(jù)(Series)根據(jù)分組鍵進行了聚合,產生了一個新的Series,其索引為key1列中的唯一值。

這種索引操作所返回的對象是一個已分組的DataFrame(如果傳入的是列表或數(shù)組)或已分組的Series

df.groupby(['key1'])['data1'].size()
key1
a 3
b 2
Name: data1, dtype: int64

3.對data1按[key1,key2]進行分組,并計算data1的平均值

df['data1'].groupby([df['key1'],df['key2']]).mean()
key1 key2
a  one -0.353657
  two -0.627470
b  one  0.179488
  two -0.299878
Name: data1, dtype: float64
df.groupby(['key1','key2'])['data1'].mean()
#等價于:df.groupby(['key1','key2']).data1'.mean()
key1 key2
a  one -0.353657
  two -0.627470
b  one  0.179488
  two -0.299878
Name: data1, dtype: float64

通過兩個鍵對數(shù)據(jù)進行了分組,得到的Series具有一個層次化索引(由唯一的鍵對組成):

df.groupby(['key1','key2'])['data1'].mean().unstack()
key2 one two
key1
a -0.353657 -0.627470
b 0.179488 -0.299878

在上面這些示例中,分組鍵均為Series。實際上,分組鍵可以是任何長度適當?shù)臄?shù)組。非常靈活。

橫方向上

按列的數(shù)據(jù)類型(df.dtypes)來分

df共兩種數(shù)據(jù)類型:float64和object,所以會分為兩組(dtype(‘float64'),數(shù)據(jù)片),(dtype(‘O'), 數(shù)據(jù)片)

list(df.groupby(df.dtypes, axis=1))
[(dtype('float64'),  data1  data2
 0 -0.410122 0.247895
 1 -0.627470 -0.989268
 2 0.179488 -0.054570
 3 -0.299878 -1.640494
 4 -0.297191 0.954447), (dtype('O'), key1 key2
 0 a one
 1 a two
 2 b one
 3 b two
 4 a one)]

agg的應用

groupby+agg 可以對groupby的結果同時應用多個函數(shù)

SeriesGroupBy的方法agg()參數(shù):

aggregate(self, func_or_funcs, * args, ** kwargs)
func: function, string, dictionary, or list of string/functions

返回:aggregated的Series

s= pd.Series([10,20,30,40])
s
0 10
1 20
2 30
3 40
dtype: int64
for n,g in s.groupby([1,1,2,2]):
 print(n)
 print(g)
0 10
1 20
dtype: int64
2
2 30
3 40
dtype: int64
s.groupby([1,1,2,2]).min()
1
1 10
2 30
dtype: int64
#等價于這個:
s.groupby([1,1,2,2]).agg('min')
1 10
2 30
dtype: int64
s.groupby([1,1,2,2]).agg(['min','max'])#加[],func僅接受一個參數(shù)
min max
1 10 20
2 30 40

常常這樣用:

df

data1 data2 key1 key2
0 -0.410122 0.247895 a one
1 -0.627470 -0.989268 a two
2 0.179488 -0.054570 b one
3 -0.299878 -1.640494 b two
4 -0.297191 0.954447 a one

比較下面,可以看出agg的用處:

df.groupby(['key1'])['data1'].min()
key1
a -0.627470
b -0.299878
Name: data1, dtype: float64
df.groupby(['key1'])['data1'].agg({'min'})
min
key1
a -0.627470
b -0.299878
#推薦用這個√
df.groupby(['key1']).agg({'data1':'min'})#對data1列,取各組的最小值,名字還是data1
data1
key1
a -0.627470
b -0.299878
#按key1分組后,aggregate各組data1的最小值和最大值:
df.groupby(['key1'])['data1'].agg({'min','max'})
max min
key1
a -0.297191 -0.627470
b 0.179488 -0.299878
#推薦用這個√
df.groupby(['key1']).agg({'data1':['min','max']})
data1
min max
key1
a -0.627470 -0.297191
b -0.299878 0.179488

可以對groupby的結果更正列名(不推薦用這個,哪怕在后面單獨更改列名)

# 對data1,把min更名為a,max更名為b
df.groupby(['key1'])['data1'].agg({'a':'min','b':'max'})#這里的'min' 'max'為兩個函數(shù)名
d:\python27\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
a b
key1
a -0.627470 -0.297191
b -0.299878 0.179488

重要技巧: groupby之后直接.reset_index()可以得到一個沒有多級索引的DataFrame

之后可以通過df.rename({‘old_col1':‘new_col1',‘old_col2':‘new_col2',…})重命名

eg:

df1= df.groupby(['date'])['price'].agg({'sum','count'}).reset_index()

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Pandas中DataFrame的分組/分割/合并的實現(xiàn)
  • pandas 實現(xiàn)分組后取第N行
  • pandas分組排序 如何獲取第二大的數(shù)據(jù)
  • pandas groupby分組對象的組內排序解決方案
  • pandas組內排序,并在每個分組內按序打上序號的操作
  • pandas 實現(xiàn)某一列分組,其他列合并成list

標簽:隨州 安慶 西安 錦州 白城 股票 日照 天水

巨人網絡通訊聲明:本文標題《pandas group分組與agg聚合的實例》,本文關鍵詞  pandas,group,分組,與,agg,聚合,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pandas group分組與agg聚合的實例》相關的同類信息!
  • 本頁收集關于pandas group分組與agg聚合的實例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美极品aⅴ影院| 成人黄色在线看| 成人午夜免费视频| 在线精品视频一区二区三四| 精品久久久久久最新网址| 一区二区欧美国产| 成人午夜又粗又硬又大| 日韩免费看网站| 午夜精品一区二区三区电影天堂 | 在线精品视频一区二区| 久久久国产一区二区三区四区小说| 亚洲电影一区二区| 91偷拍与自偷拍精品| 久久婷婷成人综合色| 久久精品国产秦先生| 欧美一级片免费看| 天天影视网天天综合色在线播放| 91香蕉视频污在线| 国产精品国产三级国产三级人妇| 精品一区二区三区视频在线观看| 91精品国产免费久久综合| 亚洲成人免费电影| 欧美日韩电影在线| 日日摸夜夜添夜夜添精品视频| 欧美亚男人的天堂| 亚洲一二三四区不卡| 欧美亚洲动漫另类| 偷拍一区二区三区四区| 在线观看91精品国产麻豆| 图片区小说区区亚洲影院| 欧美日韩小视频| 日韩电影网1区2区| 日韩欧美一区在线观看| 国内精品写真在线观看| 久久久久久免费毛片精品| 国产成人免费9x9x人网站视频| 精品国产91洋老外米糕| 国产乱码字幕精品高清av| 欧美激情综合五月色丁香| 成人一区二区三区中文字幕| 中文字幕一区二区三区精华液| av一本久道久久综合久久鬼色| 中文字幕日韩欧美一区二区三区| 99视频超级精品| 夜夜亚洲天天久久| 91精品国产91久久综合桃花| 国内精品伊人久久久久影院对白| 久久精品欧美日韩| 99re这里只有精品视频首页| 一区二区三区在线视频观看58| 欧美性三三影院| 九一久久久久久| 亚洲国产精华液网站w| 日本精品免费观看高清观看| 日韩精品成人一区二区在线| 久久嫩草精品久久久精品一| www.亚洲激情.com| 午夜欧美电影在线观看| 久久久久久久综合| 日本伦理一区二区| 九色综合国产一区二区三区| 亚洲日本va午夜在线电影| 欧美人妇做爰xxxⅹ性高电影 | 欧美成人精品3d动漫h| 国产精品一二三在| 亚洲一区二区精品视频| 久久综合九色综合欧美亚洲| 日本韩国欧美一区二区三区| 激情图片小说一区| 亚洲国产另类av| 国产欧美日韩在线看| 欧美日韩一区二区三区在线看| 韩国欧美国产1区| 亚洲激情一二三区| 国产亚洲人成网站| 91精品国产色综合久久不卡电影 | 亚洲男同性视频| 精品国产免费久久| 欧美日韩一区国产| www.久久精品| 国产电影一区在线| 奇米精品一区二区三区四区| 亚洲欧美一区二区在线观看| 精品国产免费人成在线观看| 欧美丝袜第三区| aaa国产一区| 国产不卡视频在线播放| 另类小说色综合网站| 婷婷久久综合九色国产成人| 亚洲你懂的在线视频| 日韩欧美久久一区| 7777精品伊人久久久大香线蕉 | 欧美亚洲国产一区二区三区| 成人高清免费在线播放| 麻豆精品新av中文字幕| 亚洲va韩国va欧美va精品| 成人欧美一区二区三区小说| 国产清纯白嫩初高生在线观看91 | 日韩成人av影视| 一区二区三区在线观看国产| 国产精品短视频| 国产精品女同互慰在线看| 精品国产一区二区精华| 这里只有精品视频在线观看| 欧美日韩一区 二区 三区 久久精品| www.亚洲在线| 成人动漫一区二区| 成人sese在线| 成熟亚洲日本毛茸茸凸凹| 国产成人高清视频| 成人免费av资源| 成人激情免费电影网址| 成人黄色免费短视频| 成人avav影音| 色综合久久久久网| 在线免费观看不卡av| 色菇凉天天综合网| 欧美在线观看视频一区二区三区| 日本道在线观看一区二区| 在线观看成人小视频| 欧美视频在线观看一区二区| 欧美日韩国产在线播放网站| 欧美久久久久久久久久| 日韩一区二区免费视频| 亚洲精品一区二区三区蜜桃下载| 精品黑人一区二区三区久久| 精品国产百合女同互慰| 欧美极品另类videosde| 最新国产成人在线观看| 亚洲精品一二三区| 日韩avvvv在线播放| 国产在线麻豆精品观看| 成人午夜激情影院| 欧洲视频一区二区| 欧美一区二区网站| 久久久久青草大香线综合精品| 国产精品人妖ts系列视频| 亚洲综合小说图片| 狠狠色丁香婷婷综合久久片| 国产成人免费视频| 在线观看国产91| 久久天天做天天爱综合色| 国产精品家庭影院| 午夜精品一区二区三区电影天堂| 韩国女主播一区| 色哟哟亚洲精品| 精品国产麻豆免费人成网站| 亚洲日本韩国一区| 蜜臀av亚洲一区中文字幕| 成人h动漫精品一区二| 欧美日韩中文另类| 国产精品区一区二区三区 | 中文字幕制服丝袜成人av | 欧美一区二区久久| 久久久99精品免费观看不卡| 亚洲最新视频在线观看| 国产美女精品在线| 欧美日韩aaaaaa| 国产精品人妖ts系列视频| 秋霞午夜鲁丝一区二区老狼| 一本大道av一区二区在线播放| 亚洲精品一线二线三线| 亚洲制服丝袜av| 懂色av一区二区三区免费看| 欧美日韩国产综合久久| 国产精品剧情在线亚洲| 精品午夜久久福利影院| 欧美日韩午夜精品| 亚洲日本成人在线观看| 大尺度一区二区| 日韩美女一区二区三区四区| 亚洲国产综合色| 色噜噜狠狠色综合中国| 国产调教视频一区| 极品销魂美女一区二区三区| 欧美日韩在线不卡| 一区二区三区四区视频精品免费| 国产电影一区二区三区| 欧美精品一区二区三区四区| 免费精品视频最新在线| 欧美性大战xxxxx久久久| 日韩一区中文字幕| 国产99久久久国产精品潘金网站| 欧美理论片在线| 亚洲成人一区二区在线观看| 97精品久久久午夜一区二区三区| 中文一区在线播放| 豆国产96在线|亚洲| 国产精品私人影院| 国产69精品久久久久毛片| 久久久99精品免费观看| 国产精品亚洲综合一区在线观看| 精品国产乱码久久久久久免费| 欧美aⅴ一区二区三区视频| 欧美绝品在线观看成人午夜影视| 亚洲h在线观看| 日韩视频不卡中文| 国产一区二三区| 精品国产一二三| 成人毛片在线观看|