西安市做网站公司有哪些,无锡网站优化推广,生物制药公司网站模板,学生个人网页设计主题经常会遇见对某个字段进行分组、统计等#xff0c;其中还包括一些比较细致的问题#xff0c;有时往往会忘记#xff0c;这里做个记录。 文章目录 1. sql的分组#xff08;group by/ over()#xff09;2. PYTHON分组函数使用groupby 1. sql的分组#xff08;group by/ ov…经常会遇见对某个字段进行分组、统计等其中还包括一些比较细致的问题有时往往会忘记这里做个记录。 文章目录 1. sql的分组group by/ over()2. PYTHON分组函数使用groupby 1. sql的分组group by/ over()
sql的分组分为两类函数一类是直接group by另一类就是窗口函数进行聚合。 (1) 使用分组函数的注意事项
分组函数会自动忽略NULL值即在计算时不会将NULL值计入。分组函数只能在包含GROUP BY子句的SELECT语句中使用。在使用WHERE子句时不能直接使用分组函数因为WHERE子句是在GROUPBY子句之前执行的。如果需要筛选分组应使用HAVING子句。分组函数可以嵌套使用即在一个分组函数的计算结果上再进行分组。 (2) 窗口函数 窗口函数是一类在相关行集即“窗口”上进行计算的函数这些行集由 OVER() 子句定义可以基于 SQL 查询中的各种排序和分组条件。窗口函数可以进行复杂的分析如运行总计、移动平均、排名等。
以下是一些常见的窗口函数及其用途 ROW_NUMBER()为窗口内的每一行分配一个唯一的序号从1开始 RANK() 和 DENSE_RANK()对窗口内的行进行排名RANK() 排名时排名之间会跳号而 DENSE_RANK() 则不会 LEAD() 和 LAG()访问窗口中当前行之后的LEAD或之前的LAG的行 SUM()、AVG()、MIN()、MAX()这些聚合函数也可以作为窗口函数使用对窗口内的行集进行计算。 VARIANCE() 和 STDDEV()计算窗口内数值的方差和标准差。
(3) 窗口函数通常与OVER()子句一起使用以便定义窗口的计算方式。OVER()子句可以包含排序订单ORDER BY和分页PARTITION BY子句。
-- 为每个区域每个月的销售总额计算一个移动的总和
SELECT region,
date_part(month, date) as month,
SUM(sales_amount) over (partition by region order by date) as monthly_sales
FROM sales
ORDER BY region, date;2. PYTHON分组函数使用groupby
(1) data.groupby().size().reset_index(name)
import pandas as pd# 假设有一个DataFrame如下
data pd.DataFrame({A: [a, a, b, b, a],B: [one, two, one, two, one]
})# 使用groupby和size方法计算每个组的大小
grouped data.groupby(A).size().reset_index()# 输出结果
print(grouped)
(2) transform函数
groupeddata.groupby([pproduct_no,range]).size().reset_index(namecounts)
grouped[percentage]grouped[counts]/grouped.groupby(product_no)[counts].transform(sum).transform(‘sum’): transform方法在这里被用来对选定的列‘counts’中的每个分组应用一个函数。在这个例子中函数是sum它会计算每个分组中counts列值的和。transform方法有两个重要的特点
它不会改变原始数据形状它会返回一个与原始数据相同形状的新数据其中包含了应用了指定函数的数据。
在这个例子中每个分组的counts列的值会被替换为该组counts列值的总和
(3) apply函数 对每个分组的数据调用某个函数
def sam_st(df,target):ydf[target]ttl_cntlen(y)good_cntnp.sum(y0)bad_cntnp.sum(y1)bad_ratebad_cnt/(good_cntbad_cnt)return pd.Series([ttl_cnt,good_cnt,bad_cnt,bad_rate],index[TotalCnt,GoodCnt,BadCnt,BadRate],dtypeobject)
group_col
target
data.groupby(group_col).apply(sam_st,targettarget)
# sam_st里面的df代表分组之后的每个分组的数据groupby之后就可以直接作为参数df