groupby函数是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。
如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。
在本文中,我们将使用25个示例来详细介绍groupby函数的用法。这些示例涵盖了一些不太常用但在各种任务中都能派上用场的操作。这里使用的数据集是随机生成的,我们将其视为一个销售数据集。
<code>import pandas as pd sales = pd.read_csv("sales_data.csv") sales.head()</code>
1、单列聚合
我们可以计算出每个店铺的平均库存数量如下:
<code>sales.groupby("store")["stock_qty"].mean()</code>
2、多列聚合
在一个操作中进行多个聚合。以下是我们如何计算每个商店的平均库存数量和价格。
<code>sales.groupby("store")[["stock_qty","price"]].mean()</code>
3、多列多个聚合
我们还可以使用agg函数来计算多个聚合值。
<code>sales.groupby("store")["stock_qty"].agg(["mean", "max"])</code>
4、对聚合结果进行命名
在前面的两个示例中,聚合列表表示什么还不清楚。例如,“mean”并没有告诉我们它是什么的均值。在这种情况下,我们可以对聚合的结果进行命名。
<code>sales.groupby("store").agg( avg_stock_qty = ("stock_qty", "mean"), max_stock_qty = ("stock_qty", "max") )</code>
要聚合的列和函数名需要写在元组中。
5、多个聚合和多个函数
<code>sales.groupby("store")[["stock_qty","price"]].agg(["mean", "max"])</code>
6、对不同列的聚合进行命名
<code>sales.groupby("store").agg( avg_stock_qty = ("stock_qty", "mean"), avg_price = ("price", "mean") )</code>
7、as_index参数
如果groupby操作的输出是DataFrame,可以使用as_index参数使它们成为DataFrame中的一列。
<code>sales.groupby("store", as_index=False).agg( avg_stock_qty = ("stock_qty", "mean"), avg_price = ("price", "mean") )</code>
8、用于分组的多列
就像我们可以聚合多个列一样,我们也可以使用多个列进行分组。
<code>sales.groupby(["store","product_group"], as_index=False).agg( avg_sales = ("last_week_sales", "mean") ).head()</code>
9、排序输出
可以使用sort_values函数根据聚合列对输出进行排序。
<code>sales.groupby(["store","product_group"], as_index=False).agg( avg_sales = ("last_week_sales", "mean") ).sort_values(by="avg_sales", ascending=False).head()</code>
10、最大的Top N
<code>sales.groupby("store")["last_week_sales"].nlargest(2)</code>
11、最小的Top N
<code>sales.groupby("store")["last_week_sales"].nsmallest(2)</code>
12、第n个值
<code>sales_sorted = sales.sort_values(by=["store","last_month_sales"], ascending=False, ignore_index=True) sales_sorted.groupby("store").nth(4)</code>
13、第n个值,倒排序
<code>sales_sorted.groupby("store").nth(-2)</code>
14、唯一值
<code>sales.groupby("store", as_index=False).agg( unique_values = ("product_code","unique") )</code>
15、唯一值的数量
<code>sales.groupby("store", as_index=False).agg( number_of_unique_values = ("product_code","nunique") )</code>
16、Lambda表达式
<code>sales.groupby("store").agg( total_sales_in_thousands = ( "last_month_sales", lambda x: round(x.sum() / 1000, 1) ) )</code>
17、apply函数
<code>sales.groupby("store").apply( lambda x: (x.last_week_sales - x.last_month_sales / 4).mean() )</code>
18、dropna
<code>sales.groupby("store", dropna=False)["price"].mean()</code>
19、求组的个数
<code>sales.groupby(["store", "product_group"]).ngroups</code>
20、获得一个特定分组
<code>daisy_pg1 = sales.groupby(["store", "product_group"]).get_group(("Daisy","PG1")) daisy_pg1.head()</code>
21、rank函数
<code>sales["rank"] = sales.groupby("store")["price"].rank(ascending=False, method="dense") sales.head()</code>
22、累计操作
<code>df["cum_sum"] = df.groupby("category")["value"].cumsum()</code>
23、expanding函数
<code>df["cum_sum_2"] = df.groupby("category")["value"].expanding().sum().values</code>
24、累积平均
<code>df["cum_mean"] = df.groupby("category")["value"].expanding().mean().values</code>
25、展开后的最大值
<code>df["current_highest"] = df.groupby("category")["value"].expanding().max().values</code>
在Pandas中,groupby函数与aggregate函数共同构成了高效的数据分析工具。在本文所提供的示例中,涵盖了groupby功能的大多数用例,希望对你有所帮助。
暂无评论内容