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

主頁 > 知識庫 > Pandas中GroupBy具體用法詳解

Pandas中GroupBy具體用法詳解

熱門標(biāo)簽:預(yù)覽式外呼系統(tǒng) 長春極信防封電銷卡批發(fā) 外賣地址有什么地圖標(biāo)注 如何地圖標(biāo)注公司 煙臺電話外呼營銷系統(tǒng) 企業(yè)彩鈴地圖標(biāo)注 銀川電話機(jī)器人電話 電銷機(jī)器人錄音要學(xué)習(xí)什么 上海正規(guī)的外呼系統(tǒng)最新報價

簡介

pandas中的DF數(shù)據(jù)類型可以像數(shù)據(jù)庫表格一樣進(jìn)行g(shù)roupby操作。通常來說groupby操作可以分為三部分:分割數(shù)據(jù),應(yīng)用變換和和合并數(shù)據(jù)。

本文將會詳細(xì)講解Pandas中的groupby操作。

分割數(shù)據(jù)

分割數(shù)據(jù)的目的是將DF分割成為一個個的group。為了進(jìn)行g(shù)roupby操作,在創(chuàng)建DF的時候需要指定相應(yīng)的label:

df = pd.DataFrame(
   ...:     {
   ...:         "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
   ...:         "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
   ...:         "C": np.random.randn(8),
   ...:         "D": np.random.randn(8),
   ...:     }
   ...: )
   ...:

df
Out[61]: 
     A      B         C         D
0  foo    one -0.490565 -0.233106
1  bar    one  0.430089  1.040789
2  foo    two  0.653449 -1.155530
3  bar  three -0.610380 -0.447735
4  foo    two -0.934961  0.256358
5  bar    two -0.256263 -0.661954
6  foo    one -1.132186 -0.304330
7  foo  three  2.129757  0.445744

默認(rèn)情況下,groupby的軸是x軸??梢砸涣術(shù)roup,也可以多列g(shù)roup:

In [8]: grouped = df.groupby("A")

In [9]: grouped = df.groupby(["A", "B"])

多index

在0.24版本中,如果我們有多index,可以從中選擇特定的index進(jìn)行g(shù)roup:

In [10]: df2 = df.set_index(["A", "B"])

In [11]: grouped = df2.groupby(level=df2.index.names.difference(["B"]))

In [12]: grouped.sum()
Out[12]: 
            C         D
A                      
bar -1.591710 -1.739537
foo -0.752861 -1.402938

get_group

get_group 可以獲取分組之后的數(shù)據(jù):

In [24]: df3 = pd.DataFrame({"X": ["A", "B", "A", "B"], "Y": [1, 4, 3, 2]})

In [25]: df3.groupby(["X"]).get_group("A")
Out[25]: 
   X  Y
0  A  1
2  A  3

In [26]: df3.groupby(["X"]).get_group("B")
Out[26]: 
   X  Y
1  B  4
3  B  2

dropna

默認(rèn)情況下,NaN數(shù)據(jù)會被排除在groupby之外,通過設(shè)置 dropna=False 可以允許NaN數(shù)據(jù):

In [27]: df_list = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]

In [28]: df_dropna = pd.DataFrame(df_list, columns=["a", "b", "c"])

In [29]: df_dropna
Out[29]: 
   a    b  c
0  1  2.0  3
1  1  NaN  4
2  2  1.0  3
3  1  2.0  2
# Default ``dropna`` is set to True, which will exclude NaNs in keys
In [30]: df_dropna.groupby(by=["b"], dropna=True).sum()
Out[30]: 
     a  c
b        
1.0  2  3
2.0  2  5

# In order to allow NaN in keys, set ``dropna`` to False
In [31]: df_dropna.groupby(by=["b"], dropna=False).sum()
Out[31]: 
     a  c
b        
1.0  2  3
2.0  2  5
NaN  1  4

groups屬性

groupby對象有個groups屬性,它是一個key-value字典,key是用來分類的數(shù)據(jù),value是分類對應(yīng)的值。

In [34]: grouped = df.groupby(["A", "B"])

In [35]: grouped.groups
Out[35]: {('bar', 'one'): [1], ('bar', 'three'): [3], ('bar', 'two'): [5], ('foo', 'one'): [0, 6], ('foo', 'three'): [7], ('foo', 'two'): [2, 4]}

In [36]: len(grouped)
Out[36]: 6

index的層級

對于多級index對象,groupby可以指定group的index層級:

In [40]: arrays = [
   ....:     ["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
   ....:     ["one", "two", "one", "two", "one", "two", "one", "two"],
   ....: ]
   ....: 

In [41]: index = pd.MultiIndex.from_arrays(arrays, names=["first", "second"])

In [42]: s = pd.Series(np.random.randn(8), index=index)

In [43]: s
Out[43]: 
first  second
bar    one      -0.919854
       two      -0.042379
baz    one       1.247642
       two      -0.009920
foo    one       0.290213
       two       0.495767
qux    one       0.362949
       two       1.548106
dtype: float64

group第一級:

In [44]: grouped = s.groupby(level=0)

In [45]: grouped.sum()
Out[45]: 
first
bar   -0.962232
baz    1.237723
foo    0.785980
qux    1.911055
dtype: float64

group第二級:

In [46]: s.groupby(level="second").sum()
Out[46]: 
second
one    0.980950
two    1.991575
dtype: float64

group的遍歷

得到group對象之后,我們可以通過for語句來遍歷group:

In [62]: grouped = df.groupby('A')

In [63]: for name, group in grouped:
   ....:     print(name)
   ....:     print(group)
   ....: 
bar
     A      B         C         D
1  bar    one  0.254161  1.511763
3  bar  three  0.215897 -0.990582
5  bar    two -0.077118  1.211526
foo
     A      B         C         D
0  foo    one -0.575247  1.346061
2  foo    two -1.143704  1.627081
4  foo    two  1.193555 -0.441652
6  foo    one -0.408530  0.268520
7  foo  three -0.862495  0.024580

如果是多字段group,group的名字是一個元組:

In [64]: for name, group in df.groupby(['A', 'B']):
   ....:     print(name)
   ....:     print(group)
   ....: 
('bar', 'one')
     A    B         C         D
1  bar  one  0.254161  1.511763
('bar', 'three')
     A      B         C         D
3  bar  three  0.215897 -0.990582
('bar', 'two')
     A    B         C         D
5  bar  two -0.077118  1.211526
('foo', 'one')
     A    B         C         D
0  foo  one -0.575247  1.346061
6  foo  one -0.408530  0.268520
('foo', 'three')
     A      B         C        D
7  foo  three -0.862495  0.02458
('foo', 'two')
     A    B         C         D
2  foo  two -1.143704  1.627081
4  foo  two  1.193555 -0.441652

聚合操作

分組之后,就可以進(jìn)行聚合操作:

In [67]: grouped = df.groupby("A")

In [68]: grouped.aggregate(np.sum)
Out[68]: 
            C         D
A                      
bar  0.392940  1.732707
foo -1.796421  2.824590

In [69]: grouped = df.groupby(["A", "B"])

In [70]: grouped.aggregate(np.sum)
Out[70]: 
                  C         D
A   B                        
bar one    0.254161  1.511763
    three  0.215897 -0.990582
    two   -0.077118  1.211526
foo one   -0.983776  1.614581
    three -0.862495  0.024580
    two    0.049851  1.185429

對于多index數(shù)據(jù)來說,默認(rèn)返回值也是多index的。如果想使用新的index,可以添加 as_index = False:

In [71]: grouped = df.groupby(["A", "B"], as_index=False)

In [72]: grouped.aggregate(np.sum)
Out[72]: 
     A      B         C         D
0  bar    one  0.254161  1.511763
1  bar  three  0.215897 -0.990582
2  bar    two -0.077118  1.211526
3  foo    one -0.983776  1.614581
4  foo  three -0.862495  0.024580
5  foo    two  0.049851  1.185429

In [73]: df.groupby("A", as_index=False).sum()
Out[73]: 
     A         C         D
0  bar  0.392940  1.732707
1  foo -1.796421  2.824590

上面的效果等同于reset_index

In [74]: df.groupby(["A", "B"]).sum().reset_index()
grouped.size() 計算group的大小:

In [75]: grouped.size()
Out[75]: 
     A      B  size
0  bar    one     1
1  bar  three     1
2  bar    two     1
3  foo    one     2
4  foo  three     1
5  foo    two     2

grouped.describe() 描述group的信息:

In [76]: grouped.describe()
Out[76]: 
      C                                                    ...         D                                                  
  count      mean       std       min       25%       50%  ...       std       min       25%       50%       75%       max
0   1.0  0.254161       NaN  0.254161  0.254161  0.254161  ...       NaN  1.511763  1.511763  1.511763  1.511763  1.511763
1   1.0  0.215897       NaN  0.215897  0.215897  0.215897  ...       NaN -0.990582 -0.990582 -0.990582 -0.990582 -0.990582
2   1.0 -0.077118       NaN -0.077118 -0.077118 -0.077118  ...       NaN  1.211526  1.211526  1.211526  1.211526  1.211526
3   2.0 -0.491888  0.117887 -0.575247 -0.533567 -0.491888  ...  0.761937  0.268520  0.537905  0.807291  1.076676  1.346061
4   1.0 -0.862495       NaN -0.862495 -0.862495 -0.862495  ...       NaN  0.024580  0.024580  0.024580  0.024580  0.024580
5   2.0  0.024925  1.652692 -1.143704 -0.559389  0.024925  ...  1.462816 -0.441652  0.075531  0.592714  1.109898  1.627081

[6 rows x 16 columns]

通用聚合方法

下面是通用的聚合方法:

函數(shù) 描述
mean() 平均值
sum() 求和
size() 計算size
count() group的統(tǒng)計
std() 標(biāo)準(zhǔn)差
var() 方差
sem() 均值的標(biāo)準(zhǔn)誤
describe() 統(tǒng)計信息描述
first() 第一個group值
last() 最后一個group值
nth() 第n個group值
min() 最小值
max() 最大值

同時使用多個聚合方法

可以同時指定多個聚合方法:

In [81]: grouped = df.groupby("A")

In [82]: grouped["C"].agg([np.sum, np.mean, np.std])
Out[82]: 
          sum      mean       std
A                                
bar  0.392940  0.130980  0.181231
foo -1.796421 -0.359284  0.912265

可以重命名:

In [84]: (
   ....:     grouped["C"]
   ....:     .agg([np.sum, np.mean, np.std])
   ....:     .rename(columns={"sum": "foo", "mean": "bar", "std": "baz"})
   ....: )
   ....: 
Out[84]: 
          foo       bar       baz
A                                
bar  0.392940  0.130980  0.181231
foo -1.796421 -0.359284  0.912265

NamedAgg

NamedAgg 可以對聚合進(jìn)行更精準(zhǔn)的定義,它包含 column 和aggfunc 兩個定制化的字段。

In [88]: animals = pd.DataFrame(
   ....:     {
   ....:         "kind": ["cat", "dog", "cat", "dog"],
   ....:         "height": [9.1, 6.0, 9.5, 34.0],
   ....:         "weight": [7.9, 7.5, 9.9, 198.0],
   ....:     }
   ....: )
   ....:

In [89]: animals
Out[89]: 
  kind  height  weight
0  cat     9.1     7.9
1  dog     6.0     7.5
2  cat     9.5     9.9
3  dog    34.0   198.0

In [90]: animals.groupby("kind").agg(
   ....:     min_height=pd.NamedAgg(column="height", aggfunc="min"),
   ....:     max_height=pd.NamedAgg(column="height", aggfunc="max"),
   ....:     average_weight=pd.NamedAgg(column="weight", aggfunc=np.mean),
   ....: )
   ....: 
Out[90]: 
      min_height  max_height  average_weight
kind                                        
cat          9.1         9.5            8.90
dog          6.0        34.0          102.75

或者直接使用一個元組:

In [91]: animals.groupby("kind").agg(
   ....:     min_height=("height", "min"),
   ....:     max_height=("height", "max"),
   ....:     average_weight=("weight", np.mean),
   ....: )
   ....: 
Out[91]: 
      min_height  max_height  average_weight
kind                                        
cat          9.1         9.5            8.90
dog          6.0        34.0          102.75

不同的列指定不同的聚合方法

通過給agg方法傳入一個字典,可以指定不同的列使用不同的聚合:

In [95]: grouped.agg({"C": "sum", "D": "std"})
Out[95]: 
            C         D
A                      
bar  0.392940  1.366330
foo -1.796421  0.884785

轉(zhuǎn)換操作

轉(zhuǎn)換是將對象轉(zhuǎn)換為同樣大小對象的操作。在數(shù)據(jù)分析的過程中,經(jīng)常需要進(jìn)行數(shù)據(jù)的轉(zhuǎn)換操作。

可以接lambda操作:

In [112]: ts.groupby(lambda x: x.year).transform(lambda x: x.max() - x.min())

填充na值:

In [121]: transformed = grouped.transform(lambda x: x.fillna(x.mean()))

過濾操作

filter方法可以通過lambda表達(dá)式來過濾我們不需要的數(shù)據(jù):

In [136]: sf = pd.Series([1, 1, 2, 3, 3, 3])

In [137]: sf.groupby(sf).filter(lambda x: x.sum() > 2)
Out[137]: 
3    3
4    3
5    3
dtype: int64

Apply操作

有些數(shù)據(jù)可能不適合進(jìn)行聚合或者轉(zhuǎn)換操作,Pandas提供了一個 apply 方法,用來進(jìn)行更加靈活的轉(zhuǎn)換操作。

In [156]: df
Out[156]: 
     A      B         C         D
0  foo    one -0.575247  1.346061
1  bar    one  0.254161  1.511763
2  foo    two -1.143704  1.627081
3  bar  three  0.215897 -0.990582
4  foo    two  1.193555 -0.441652
5  bar    two -0.077118  1.211526
6  foo    one -0.408530  0.268520
7  foo  three -0.862495  0.024580

In [157]: grouped = df.groupby("A")

# could also just call .describe()
In [158]: grouped["C"].apply(lambda x: x.describe())
Out[158]: 
A         
bar  count    3.000000
     mean     0.130980
     std      0.181231
     min     -0.077118
     25%      0.069390
                ...   
foo  min     -1.143704
     25%     -0.862495
     50%     -0.575247
     75%     -0.408530
     max      1.193555
Name: C, Length: 16, dtype: float64

可以外接函數(shù):

In [159]: grouped = df.groupby('A')['C']

In [160]: def f(group):
   .....:     return pd.DataFrame({'original': group,
   .....:                          'demeaned': group - group.mean()})
   .....:

In [161]: grouped.apply(f)
Out[161]: 
   original  demeaned
0 -0.575247 -0.215962
1  0.254161  0.123181
2 -1.143704 -0.784420
3  0.215897  0.084917
4  1.193555  1.552839
5 -0.077118 -0.208098
6 -0.408530 -0.049245
7 -0.862495 -0.503211

到此這篇關(guān)于Pandas中GroupBy具體用法詳解的文章就介紹到這了,更多相關(guān)Pandas GroupBy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Pandas高級教程之Pandas中的GroupBy操作
  • pandas groupby分組對象的組內(nèi)排序解決方案
  • pandas數(shù)據(jù)分組groupby()和統(tǒng)計函數(shù)agg()的使用
  • pandas之分組groupby()的使用整理與總結(jié)
  • Pandas之groupby( )用法筆記小結(jié)
  • 利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組
  • pandas獲取groupby分組里最大值所在的行方法
  • pandas groupby 分組取每組的前幾行記錄方法

標(biāo)簽:西寧 上饒 宜昌 湖北 盤錦 佳木斯 潮州 珠海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Pandas中GroupBy具體用法詳解》,本文關(guān)鍵詞  Pandas,中,GroupBy,具體,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Pandas中GroupBy具體用法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Pandas中GroupBy具體用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    最新欧美精品一区二区三区| 色吊一区二区三区| 日韩在线一二三区| 一区二区三区精品| 亚洲最色的网站| 亚洲成人资源网| 婷婷综合久久一区二区三区| 日韩高清中文字幕一区| 蜜臀av性久久久久蜜臀aⅴ| 美腿丝袜亚洲色图| 成人免费av网站| 成人av资源网站| 欧美影院精品一区| 日韩天堂在线观看| 久久久青草青青国产亚洲免观| 国产婷婷色一区二区三区四区| 中文字幕av在线一区二区三区| 国产精品久久久久一区| 亚洲午夜久久久久| 麻豆精品视频在线| 福利一区二区在线观看| 色婷婷精品久久二区二区蜜臂av| 日本精品免费观看高清观看| 欧美精品丝袜中出| 国产亚洲欧美中文| 亚洲在线免费播放| 精品一区二区免费视频| 91丨porny丨户外露出| 在线电影一区二区三区| 国产性色一区二区| 亚洲国产精品欧美一二99| 韩国精品一区二区| 欧洲亚洲精品在线| 久久这里只有精品6| 一区二区在线观看不卡| 精品中文字幕一区二区| 97超碰欧美中文字幕| 日韩免费视频一区二区| 中文字幕一区日韩精品欧美| 午夜精品久久久久久| 成人精品国产一区二区4080| 欧美一区二区免费观在线| 国产精品乱人伦| 奇米888四色在线精品| 99久精品国产| 久久综合成人精品亚洲另类欧美 | 天天做天天摸天天爽国产一区| 亚洲精品国产a| 久久99精品久久久久久久久久久久 | 久久麻豆一区二区| 亚洲成精国产精品女| 国产成人免费在线观看不卡| 欧美精品亚洲二区| 一区二区三区鲁丝不卡| 国产成人久久精品77777最新版本| 欧美日韩亚洲丝袜制服| 国产精品福利av| 国产综合一区二区| 日韩一区二区视频在线观看| 亚洲女子a中天字幕| 国产精品亚洲午夜一区二区三区| 3751色影院一区二区三区| 中文字幕中文乱码欧美一区二区| 久久精品国内一区二区三区| 欧美日韩另类国产亚洲欧美一级| 亚洲免费在线观看| 色综合久久中文综合久久97 | 国产99精品国产| 日韩欧美一二三区| 日韩高清不卡一区二区| 欧美日韩你懂的| 亚洲国产精品久久一线不卡| 91国模大尺度私拍在线视频| 1区2区3区国产精品| 丁香一区二区三区| 国产精品亲子乱子伦xxxx裸| 国产成人综合网| 中文乱码免费一区二区| 成人自拍视频在线| 亚洲欧洲国产日韩| 91精品1区2区| 婷婷开心久久网| 4438x成人网最大色成网站| 日韩中文字幕不卡| 久久久久久久综合狠狠综合| 国产成人午夜精品5599| 亚洲欧洲另类国产综合| 欧美性色黄大片| 青青草国产成人av片免费| 久久综合国产精品| 波多野结衣精品在线| 亚洲影院在线观看| 日韩视频中午一区| 成人av资源在线| 亚洲va欧美va人人爽午夜| 精品欧美一区二区久久| www.亚洲色图| 日韩精品电影在线观看| 日韩欧美一级二级三级久久久| 久久99久久久欧美国产| 国产精品美女一区二区三区| 欧美三级日韩在线| 日本色综合中文字幕| 久久午夜色播影院免费高清| 成人av先锋影音| 亚洲成a人v欧美综合天堂下载 | 国产精品久久精品日日| 欧美无砖砖区免费| 久久国产剧场电影| 亚洲三级在线播放| 欧美一级片在线看| 成人av午夜影院| 亚洲成av人片在线观看无码| 亚洲精品一区二区在线观看| 99久久精品久久久久久清纯| 美国av一区二区| 亚洲综合成人在线视频| 日韩女优毛片在线| www.欧美精品一二区| 美日韩黄色大片| 亚洲精品国久久99热| 久久综合国产精品| 欧美精品精品一区| 成人午夜在线播放| 久久99精品久久久久| 亚洲久草在线视频| 中文字幕av一区二区三区高| 日韩欧美视频一区| 欧美日韩二区三区| 91麻豆国产香蕉久久精品| 国产一区二区三区免费在线观看| 亚洲国产cao| 国产精品欧美久久久久一区二区| 日韩一区二区三区视频| 在线观看不卡一区| 91免费观看在线| 成人久久18免费网站麻豆| 天天色天天爱天天射综合| 亚洲影视在线观看| 日本一区二区高清| 久久久不卡网国产精品二区| 9191国产精品| 欧美日韩中文字幕一区| 91豆麻精品91久久久久久| 成人黄色大片在线观看| 丁香激情综合国产| 国模大尺度一区二区三区| 亚洲一区二区成人在线观看| 中文字幕一区二区视频| 成人欧美一区二区三区白人| 国产丝袜欧美中文另类| 久久亚洲春色中文字幕久久久| 日韩欧美中文字幕精品| 日韩三级在线免费观看| 欧美日韩在线观看一区二区 | 中文字幕一区二区三区不卡在线| 国产欧美综合在线| 国产精品美女一区二区| 一区二区三区日韩精品| 亚洲国产欧美在线人成| 亚洲国产精品嫩草影院| 三级一区在线视频先锋| 麻豆精品国产91久久久久久| 久色婷婷小香蕉久久| 国产资源在线一区| 成人精品免费视频| 在线欧美日韩精品| 91精品国产一区二区人妖| 精品国产sm最大网站免费看| 久久婷婷国产综合精品青草| 国产精品毛片高清在线完整版| 亚洲蜜臀av乱码久久精品| 五月天一区二区三区| 韩日欧美一区二区三区| 97久久精品人人澡人人爽| 欧美日韩一卡二卡| 精品对白一区国产伦| 国产精品美女视频| 亚洲精品国产精华液| 日本不卡一二三| 成人午夜av电影| 欧美日韩激情一区二区| 久久久久国产精品人| 一区二区激情视频| 免费观看在线综合色| 国产一区二区不卡老阿姨| av影院午夜一区| 欧美一区二区啪啪| 国产精品高清亚洲| 日韩成人一区二区三区在线观看| 美女网站在线免费欧美精品| 国产aⅴ精品一区二区三区色成熟| 91福利精品第一导航| 久久精品一区蜜桃臀影院| 午夜精品福利在线| 99精品视频一区二区| 欧美xfplay| 亚洲国产你懂的| 91视视频在线直接观看在线看网页在线看| 欧美日本一区二区三区四区 |