日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
25個例子學(xué)會PandasGroupby操作!

大家好,我是菜鳥哥。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、金牛網(wǎng)站維護(hù)、網(wǎng)站推廣。

groupby是Pandas在數(shù)據(jù)分析中最常用的函數(shù)之一。它用于根據(jù)給定列中的不同值對數(shù)據(jù)點(即行)進(jìn)行分組,分組后的數(shù)據(jù)可以計算生成組的聚合值。

如果我們有一個包含汽車品牌和價格信息的數(shù)據(jù)集,那么可以使用groupby功能來計算每個品牌的平均價格。

在本文中,我們將使用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、單列聚合

我們可以計算出每個店鋪的平均庫存數(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)绾斡嬎忝總€商店的平均庫存數(shù)量和價格。

sales.groupby("store")[["stock_qty","price"]].mean()

3、多列多個聚合

我們還可以使用agg函數(shù)來計算多個聚合值。

sales.groupby("store")["stock_qty"].agg(["mean", "max"])

4、對聚合結(jié)果進(jìn)行命名

在前面的兩個示例中,聚合列表示什么還不清楚。例如,“mean”并沒有告訴我們它是什么的均值。在這種情況下,我們可以對聚合的結(jié)果進(jìn)行命名。

要聚合的列和函數(shù)名需要寫在元組中。

sales.groupby("store").agg(  
avg_stock_qty = ("stock_qty", "mean"),
max_stock_qty = ("stock_qty", "max")
)

5、多個聚合和多個函數(shù)

sales.groupby("store")[["stock_qty","price"]].agg(["mean", "max"])

6、對不同列的聚合進(jìn)行命名

7、as_index參數(shù)

sales.groupby("store").agg(
avg_stock_qty = ("stock_qty", "mean"),
avg_price = ("price", "mean")
)

如果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項。例如," 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)用到每個組。例如,我們可以計算每家店上周銷售額與上個月四分之一銷售額的差值的平均值,如下:

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ù)忽略缺失值。如果用于分組的列中缺少一個值,那么它將不包含在任何組中,也不會單獨顯示。所以可以使用dropna參數(shù)來改變這個行為。

讓我們首先添加一個缺少存儲值的新行。

sales.loc[1000] = [None, "PG2", 10000, 120, 64, 96, 15, 53]

然后計算帶有dropna參數(shù)和不帶有dropna參數(shù)的每個商店的平均價格,以查看差異。

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、累計操作

們可以計算出每組的累計總和。

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)
}
)

我們可以單獨創(chuàng)建一個列,包含值列的累計總和,如下所示:

df["cum_sum"] = df.groupby("category")["value"].cumsum()

23、expanding函數(shù)

expanding函數(shù)提供展開轉(zhuǎn)換。但是對于展開以后的操作還是需要一個累計函數(shù)來堆區(qū)操作。例如它與cumsum 函數(shù)一起使用,結(jié)果將與與sum函數(shù)相同。

df["cum_sum_2"] = df.groupby(
"category"
)["value"].expanding().sum().values

24、累積平均

利用展開函數(shù)和均值函數(shù)計算累積平均。

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ù)用例,希望對你有所幫助。


網(wǎng)站欄目:25個例子學(xué)會PandasGroupby操作!
網(wǎng)址分享:http://www.5511xx.com/article/dpsisdp.html