groupby的类型
时间: 2025-01-05 22:36:19 浏览: 2
### GroupBy 操作的应用场景与实现方式
#### Pandas 中的 GroupBy 应用场景及其实现方法
Pandas 提供了强大的 `groupby` 方法来进行分组聚合操作。通过该功能,可以根据一个或多个键对数据集进行分割,并应用各种统计函数。
对于简单的分组求和:
```python
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
'B': range(6)
})
result = df.groupby('A').sum()
print(result)
```
当涉及到多列或多条件组合时,则可以通过传递列表给 groupby 函数来指定多个分组依据[^1]。
复杂情况下还可以自定义聚合逻辑,例如使用字典映射不同字段的不同聚合规则:
```python
aggregations = {
'B': ['mean', 'min', 'max']
}
result = df.groupby('A').agg(aggregations)
print(result)
```
#### SQL 中的 GROUP BY 使用案例分析
在 SQL 查询语句里,`GROUP BY` 子句通常跟随着 `SELECT` 和 `FROM` 后面,在某些时候也会配合 `HAVING` 来过滤分组后的记录集合。下面是一个基于订单表 (orders) 计算每种商品类别下的平均价格的例子:
```sql
SELECT category_id, AVG(price) AS avg_price
FROM orders
GROUP BY category_id;
```
为了进一步筛选出那些销售量超过特定数量的商品类目,可以在上述基础上加入 HAVING 子句:
```sql
SELECT category_id, COUNT(*) AS sales_count
FROM orders
GROUP BY category_id
HAVING COUNT(*) > 100; -- 假设阈值为100件
```
值得注意的是,SQL中的 `CASE WHEN` 结构也可以被用来创建临时分类标签以便更好地理解业务含义,这同样适用于后续的数据汇总工作[^2]。
#### 实际例子对比:按金额范围划分客户等级
假设有一个包含用户购买行为信息的数据框 order_df ,其中有一列为 total_amount 表示用户的累计消费总额。现在希望根据这个数值将用户划分为三个不同的级别——低级([0-300))、中级([300,600)) 高级 ([600,900)) ——并计算各级别的用户数。
##### 在 Pandas 下的操作如下所示:
```python
bins = [0, 300, 600, float('inf')]
labels = ["Low", "Medium", "High"]
order_df['level'] = pd.cut(order_df.total_amount, bins=bins, labels=labels)
customer_levels = order_df.groupby('level')['uid'].nunique().reset_index(name='count')
print(customer_levels)
```
##### 对应地,在标准SQL环境下可采用以下方案完成相同任务:
```sql
WITH customer_level AS (
SELECT uid,
CASE
WHEN total_amount >= 0 AND total_amount < 300 THEN 'Low'
WHEN total_amount >= 300 AND total_amount < 600 THEN 'Medium'
ELSE 'High'
END level
FROM order_df
)
SELECT level, COUNT(DISTINCT uid) count
FROM customer_level
GROUP BY level;
```
阅读全文