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

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

新聞中心

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

大家好,我是菜鳥哥。

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

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

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

在本文中,我們將使用25個(gè)示例來(lái)詳細(xì)介紹groupby函數(shù)的用法。這25個(gè)示例中還包含了一些不太常用但在各種任務(wù)中都能派上用場(chǎng)的操作。

這里使用的數(shù)據(jù)集是隨機(jī)生成的,我們把它當(dāng)作一個(gè)銷售的數(shù)據(jù)集。

import pandas as pd
sales = pd.read_csv("sales_data.csv")
sales.head()

1、單列聚合

我們可以計(jì)算出每個(gè)店鋪的平均庫(kù)存數(shù)量如下:

sales.groupby("store")["stock_qty"].mean()
#輸出
store
Daisy 1811.861702
Rose 1677.680000
Violet 14622.406061
Name: stock_qty, dtype: float64

2、多列聚合

在一個(gè)操作中進(jìn)行多個(gè)聚合。以下是我們?nèi)绾斡?jì)算每個(gè)商店的平均庫(kù)存數(shù)量和價(jià)格。

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

3、多列多個(gè)聚合

我們還可以使用agg函數(shù)來(lái)計(jì)算多個(gè)聚合值。

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

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

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

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

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

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

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

6、對(duì)不同列的聚合進(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、用于分組的多列

就像我們可以聚合多個(gè)列一樣,我們也可以使用多個(gè)列進(jìn)行分組。

sales.groupby(["store","product_group"], as_index=False).agg(
avg_sales = ("last_week_sales", "mean")
).head()

每個(gè)商店和產(chǎn)品的組合都會(huì)生成一個(gè)組。

9、排序輸出

可以使用sort_values函數(shù)根據(jù)聚合列對(duì)輸出進(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ù)返回每個(gè)組的最大值。如果我們需要n個(gè)最大的值,可以用下面的方法:

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個(gè)值

除上面2個(gè)以外,還可以找到一組中的第n個(gè)值。

sales_sorted = sales.sort_values(by=["store","last_month_sales"], ascending=False, ignore_index=True)

找到每個(gè)店鋪上個(gè)月銷售排名第五的產(chǎn)品如下:

sales_sorted.groupby("store").nth(4)

輸出包含每個(gè)組的第5行。由于行是根據(jù)上個(gè)月的銷售值排序的,所以我們將獲得上個(gè)月銷售額排名第五的行。

13、第n個(gè)值,倒排序

也可以用負(fù)的第n項(xiàng)。例如," nth(-2) "返回從末尾開始的第二行。

sales_sorted.groupby("store").nth(-2)

14、唯一值

unique函數(shù)可用于查找每組中唯一的值。例如,可以找到每個(gè)組中唯一的產(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)用到每個(gè)組。例如,我們可以計(jì)算每家店上周銷售額與上個(gè)月四分之一銷售額的差值的平均值,如下:

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

讓我們首先添加一個(gè)缺少存儲(chǔ)值的新行。

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

然后計(jì)算帶有dropna參數(shù)和不帶有dropna參數(shù)的每個(gè)商店的平均價(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、求組的個(gè)數(shù)

有時(shí)需要知道生成了多少組,這可以使用ngroups。

sales.groupby(["store", "product_group"]).ngroups
18

在商店和產(chǎn)品組列中有18種不同值的不同組合。

20、獲得一個(gè)特定分組

get_group函數(shù)可獲取特定組并且返回DataFrame。

例如,我們可以獲得屬于存儲(chǔ)“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ù)分別對(duì)每個(gè)組中的行進(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)建一個(gè)列,包含值列的累計(jì)總和,如下所示:

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

23、expanding函數(shù)

expanding函數(shù)提供展開轉(zhuǎn)換。但是對(duì)于展開以后的操作還是需要一個(gè)累計(jì)函數(shù)來(lái)堆區(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ù)用例,希望對(duì)你有所幫助。


當(dāng)前題目:25個(gè)例子學(xué)會(huì)PandasGroupby操作!
文章路徑:http://m.5511xx.com/article/dpsisdp.html