<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          25 個例子學(xué)會Pandas Groupby 操作!

          共 4828字,需瀏覽 10分鐘

           ·

          2022-10-14 23:30

          來源丨DeepHub IMBA
          groupby是Pandas在數(shù)據(jù)分析中最常用的函數(shù)之一。它用于根據(jù)給定列中的不同值對數(shù)據(jù)點(diǎn)(即行)進(jìn)行分組,分組后的數(shù)據(jù)可以計(jì)算生成組的聚合值。
          如果我們有一個包含汽車品牌和價(jià)格信息的數(shù)據(jù)集,那么可以使用groupby功能來計(jì)算每個品牌的平均價(jià)格。
          在本文中,我們將使用25個示例來詳細(xì)介紹groupby函數(shù)的用法。這25個示例中還包含了一些不太常用但在各種任務(wù)中都能派上用場的操作。
          這里使用的數(shù)據(jù)集是隨機(jī)生成的,我們把它當(dāng)作一個銷售的數(shù)據(jù)集。
          import pandas as pd sales = pd.read_csv("sales_data.csv") sales.head()

          1、單列聚合
          我們可以計(jì)算出每個店鋪的平均庫存數(shù)量如下:
          sales.groupby("store")["stock_qty"].mean() #輸出 store Daisy 1811.861702 Rose 1677.680000 Violet 14622.406061 Name: stock_qty, dtype: float64
          2、多列聚合
          在一個操作中進(jìn)行多個聚合。以下是我們?nèi)绾斡?jì)算每個商店的平均庫存數(shù)量和價(jià)格。
          sales.groupby("store")[["stock_qty","price"]].mean()
          3、多列多個聚合
          我們還可以使用agg函數(shù)來計(jì)算多個聚合值。
          sales.groupby("store")["stock_qty"].agg(["mean", "max"])
          4、對聚合結(jié)果進(jìn)行命名
          在前面的兩個示例中,聚合列表示什么還不清楚。例如,“mean”并沒有告訴我們它是什么的均值。在這種情況下,我們可以對聚合的結(jié)果進(jìn)行命名。
          sales.groupby("store").agg( avg_stock_qty = ("stock_qty", "mean"), max_stock_qty = ("stock_qty", "max") )
          要聚合的列和函數(shù)名需要寫在元組中。
          5、多個聚合和多個函數(shù)
          sales.groupby("store")[["stock_qty","price"]].agg(["mean", "max"])


          6、對不同列的聚合進(jìn)行命名
          sales.groupby("store").agg( avg_stock_qty = ("stock_qty", "mean"), avg_price = ("price", "mean") )
          7、as_index參數(shù)
          如果groupby操作的輸出是DataFrame,可以使用as_index參數(shù)使它們成為DataFrame中的一列。
          sales.groupby("store", as_index=False).agg( avg_stock_qty = ("stock_qty", "mean"), avg_price = ("price", "mean") )

          8、用于分組的多列
          就像我們可以聚合多個列一樣,我們也可以使用多個列進(jìn)行分組。
          sales.groupby(["store","product_group"], as_index=False).agg( avg_sales = ("last_week_sales", "mean") ).head()

          每個商店和產(chǎn)品的組合都會生成一個組。
          9、排序輸出
          可以使用sort_values函數(shù)根據(jù)聚合列對輸出進(jìn)行排序。
          sales.groupby(["store","product_group"], as_index=False).agg( avg_sales = ("last_week_sales", "mean") ).sort_values(by="avg_sales", ascending=False).head()

          這些行根據(jù)平均銷售值按降序排序。
          10、最大的Top N
          max函數(shù)返回每個組的最大值。如果我們需要n個最大的值,可以用下面的方法:
          sales.groupby("store")["last_week_sales"].nlargest(2) store Daisy 413 1883 231 947 Rose 948 883 263 623 Violet 991 3222 339 2690 Name: last_week_sales, dtype: int64
          11、最小的Top N
          與最大值相似,也可以求最小值
          sales.groupby("store")["last_week_sales"].nsmallest(2)

          12、第n個值
          除上面2個以外,還可以找到一組中的第n個值。
          sales_sorted = sales.sort_values(by=["store","last_month_sales"], ascending=False, ignore_index=True)
          找到每個店鋪上個月銷售排名第五的產(chǎn)品如下:
          sales_sorted.groupby("store").nth(4)

          輸出包含每個組的第5行。由于行是根據(jù)上個月的銷售值排序的,所以我們將獲得上個月銷售額排名第五的行。
          13、第n個值,倒排序
          也可以用負(fù)的第n項(xiàng)。例如," nth(-2) "返回從末尾開始的第二行。
          sales_sorted.groupby("store").nth(-2)

          14、唯一值
          unique函數(shù)可用于查找每組中唯一的值。例如,可以找到每個組中唯一的產(chǎn)品代碼如下:
          sales.groupby("store", as_index=False).agg( unique_values = ("product_code","unique") )

          15、唯一值的數(shù)量
          還可以使用nunique函數(shù)找到每組中唯一值的數(shù)量。
          sales.groupby("store", as_index=False).agg( number_of_unique_values = ("product_code","nunique") )

          16、Lambda表達(dá)式
          可以在agg函數(shù)中使用lambda表達(dá)式作為自定義聚合操作。
          sales.groupby("store").agg( total_sales_in_thousands = ( "last_month_sales", lambda x: round(x.sum() / 1000, 1) ) )


          17、apply函數(shù)
          使用apply函數(shù)將Lambda表達(dá)式應(yīng)用到每個組。例如,我們可以計(jì)算每家店上周銷售額與上個月四分之一銷售額的差值的平均值,如下:
          sales.groupby("store").apply( lambda x: (x.last_week_sales - x.last_month_sales / 4).mean() ) store Daisy 5.094149 Rose 5.326250 Violet 8.965152 dtype: float64

          18、dropna
          缺省情況下,groupby函數(shù)忽略缺失值。如果用于分組的列中缺少一個值,那么它將不包含在任何組中,也不會單獨(dú)顯示。所以可以使用dropna參數(shù)來改變這個行為。
          讓我們首先添加一個缺少存儲值的新行。
          sales.loc[1000] = [None, "PG2", 10000, 120, 64, 96, 15, 53]

          然后計(jì)算帶有dropna參數(shù)和不帶有dropna參數(shù)的每個商店的平均價(jià)格,以查看差異。
          sales.groupby("store")["price"].mean() store Daisy 69.327426 Rose 60.513700 Violet 67.808727 Name: price, dtype: float64
          看看設(shè)置了缺失值參數(shù)的結(jié)果:
          sales.groupby("store", dropna=False)["price"].mean() store Daisy 69.327426 Rose 60.513700 Violet 67.808727 NaN 96.000000 Name: price, dtype: float64
          groupby函數(shù)的dropna參數(shù),使用pandas版本1.1.0或更高版本。
          19、求組的個數(shù)
          有時需要知道生成了多少組,這可以使用ngroups。
          sales.groupby(["store", "product_group"]).ngroups 18
          在商店和產(chǎn)品組列中有18種不同值的不同組合。
          20、獲得一個特定分組
          get_group函數(shù)可獲取特定組并且返回DataFrame。
          例如,我們可以獲得屬于存儲“Daisy”和產(chǎn)品組“PG1”的行如下:
          aisy_pg1 = sales.groupby( ["store", "product_group"]).get_group(("Daisy","PG1") ) daisy_pg1.head()

          21、rank函數(shù)
          rank函數(shù)用于根據(jù)給定列中的值為行分配秩。我們可以使用rank和groupby函數(shù)分別對每個組中的行進(jìn)行排序。
          sales["rank"] = sales.groupby("store"["price"].rank( ascending=False, method="dense" ) sales.head()

          22、累計(jì)操作
          們可以計(jì)算出每組的累計(jì)總和。
          import numpy as npdf = pd.DataFrame( { "date": pd.date_range(start="2022-08-01", periods=8, freq="D"), "category": list("AAAABBBB"), "value": np.random.randint(10, 30, size=8) } )

          我們可以單獨(dú)創(chuàng)建一個列,包含值列的累計(jì)總和,如下所示:
          df["cum_sum"] = df.groupby("category")["value"].cumsum()


          23、expanding函數(shù)
          expanding函數(shù)提供展開轉(zhuǎn)換。但是對于展開以后的操作還是需要一個累計(jì)函數(shù)來堆區(qū)操作。例如它與cumsum 函數(shù)一起使用,結(jié)果將與與sum函數(shù)相同。
          df["cum_sum_2"] = df.groupby( "category" )["value"].expanding().sum().values

          24、累積平均
          利用展開函數(shù)和均值函數(shù)計(jì)算累積平均。
          df["cum_mean"] = df.groupby( "category" )["value"].expanding().mean().values


          25、展開后的最大值
          可以使用expand和max函數(shù)記錄組當(dāng)前最大值。
          df["current_highest"] = df.groupby( "category" )["value"].expanding().max().values

          在Pandas中g(shù)roupby函數(shù)與aggregate函數(shù)共同構(gòu)成了高效的數(shù)據(jù)分析工具。在本文中所做的示例涵蓋了groupby功能的大多數(shù)用例,希望對你有所幫助。

          瀏覽 57
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新国产中文字幕在线播放 | 一级黄色电影网 | 午夜精品一区二区三区在线视频 | 黄片小视频在线免费观看 | 日本在线不卡播放视频 |