pandas中的groupby()

groupby()

586. 订单最多的客户

基本用法

  • 分组:通过指定一个或多个列名作为键来对数据进行分组。
  • 聚合:对每个分组应用聚合函数,如求和(sum())、平均值(mean())、最大值(max())、最小值(min())等。
  • 重置索引:分组操作会改变DataFrame的索引,通常你会想要使用 reset_index() 方法来重置索引,使其成为一个普通的列。

示例

单键分组

1587. 银行账户概要 II

import pandas as pd
 
# 创建一个简单的DataFrame
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
})
 
# 根据'Category'列进行分组,并计算每个组的和
grouped = df.groupby('Category')['Values'].sum().reset_index()
 
print(grouped)

在这个例子中,数据被分为两组:‘A’ 和 ‘B’,然后计算了每个组的’Values’列的和。

多键分组

1050. 合作过至少三次的演员和导演

# 创建一个包含多个分类列的DataFrame
df_multi = pd.DataFrame({
    'Category1': ['X', 'X', 'Y', 'Y'],
    'Category2': ['A', 'B', 'A', 'B'],
    'Values': [1, 2, 3, 4]
})
 
# 根据'Category1'和'Category2'列进行分组,并计算每个组的和
grouped_multi = df_multi.groupby(['Category1', 'Category2'])['Values'].sum().reset_index()
 
print(grouped_multi)

在这个例子中,数据被分为四组:(‘X’, ‘A’)、(‘X’, ‘B’)、(‘Y’, ‘A’) 和 (‘Y’, ‘B’),然后计算了每个组的’Values’列的和。

应用多个聚合函数
# 使用agg方法应用多个聚合函数
grouped_agg = df.groupby('Category')['Values'].agg(['sum', 'mean', 'max', 'min']).reset_index()
 
print(grouped_agg)

在这个例子中,对每个分组应用了四个聚合函数:求和、平均值、最大值和最小值。

转换和过滤

除了聚合之外,groupby() 还可以与 transform() 方法结合使用来进行数据转换,或者与 filter() 方法结合使用来过滤数据。

# 使用transform方法计算每个组的平均值,并将其作为新列添加到原始DataFrame中
df['Mean'] = df.groupby('Category')['Values'].transform('mean')
 
print(df)

在这个例子中,每个组的’Values’列的平均值被计算出来,并作为新列’Mean’添加到了原始DataFrame中。

注意事项

  • 当使用 groupby() 时,确保你理解分组键和聚合函数如何影响你的数据。
  • 聚合操作会改变数据的形状,通常会导致某些行或列的丢失。
  • 如果你的DataFrame很大,groupby() 操作可能会比较耗时,特别是在多键分组或应用复杂聚合函数时。在这种情况下,考虑优化你的代码或使用更高效的数据处理策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值