SQL中的聚合方法与Pandas的对应关系
在SQL和Pandas中,聚合方法是用来对数据进行汇总统计的重要工具。下面是SQL中的各种聚合方法及其与Pandas中相应操作的对应关系:
1. COUNT
-
SQL:
COUNT(*)
返回表中的行数。COUNT(column)
返回指定列中非空值的数量。
-
Pandas:
count()
方法用于计算非空值的数量。- 示例代码:
count_result = df['column'].count()
2. SUM
-
SQL:
SUM(column)
返回指定列中所有值的总和。
-
Pandas:
sum()
方法用于计算指定列中所有值的总和。- 示例代码:
sum_result = df['column'].sum()
3. AVG / AVERAGE
-
SQL:
AVG(column)
返回指定列中所有值的平均值。
-
Pandas:
mean()
方法用于计算指定列中所有值的平均值。- 示例代码:
avg_result = df['column'].mean()
4. MIN
-
SQL:
MIN(column)
返回指定列中的最小值。
-
Pandas:
min()
方法用于计算指定列中的最小值。- 示例代码:
min_result = df['column'].min()
5. MAX
-
SQL:
MAX(column)
返回指定列中的最大值。
-
Pandas:
max()
方法用于计算指定列中的最大值。- 示例代码:
max_result = df['column'].max()
6. GROUP BY
-
SQL:
GROUP BY column
用于对指定列中的值进行分组。- 可以结合
COUNT
,SUM
,AVG
,MIN
,MAX
等聚合函数一起使用。
-
Pandas:
groupby()
方法用于对DataFrame中的数据进行分组。- 可以结合
count()
,sum()
,mean()
,min()
,max()
等方法一起使用。 - 示例代码:
grouped_df = df.groupby('column').agg({'other_column': 'sum'})
7. DISTINCT
-
SQL:
DISTINCT column
返回指定列中的唯一值。
-
Pandas:
unique()
方法用于获取指定列中的唯一值。- 示例代码:
unique_values = df['column'].unique()
8. HAVING
-
SQL:
HAVING condition
用于过滤GROUP BY
后的结果集。
-
Pandas:
- 没有直接对应的
having
方法,但可以使用groupby()
结合filter()
方法来实现类似功能。 - 示例代码:
filtered_df = df.groupby('column').filter(lambda x: x['other_column'].sum() > threshold)
- 没有直接对应的
示例代码
假设我们有一个DataFrame df
,我们将演示这些聚合操作:
import pandas as pd# 创建示例 DataFrame
data = {'category': ['A', 'B', 'A', 'B', 'A', 'B'],'value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)# COUNT
count_result = df['category'].count()
print("COUNT:")
print(count_result)# SUM
sum_result = df['value'].sum()
print("\nSUM:")
print(sum_result)# AVG / AVERAGE
avg_result = df['value'].mean()
print("\nAVG:")
print(avg_result)# MIN
min_result = df['value'].min()
print("\nMIN:")
print(min_result)# MAX
max_result = df['value'].max()
print("\nMAX:")
print(max_result)# GROUP BY
grouped_df = df.groupby('category').agg({'value': ['sum', 'mean', 'min', 'max']})
print("\nGROUP BY:")
print(grouped_df)# DISTINCT
unique_categories = df['category'].unique()
print("\nDISTINCT:")
print(unique_categories)# HAVING
threshold = 50
filtered_df = df.groupby('category').filter(lambda x: x['value'].sum() > threshold)
print("\nHAVING:")
print(filtered_df)
输出示例
假设DataFrame如下所示:
category value
0 A 10
1 B 20
2 A 30
3 B 40
4 A 50
5 B 60
输出结果将会是:
COUNT:
6SUM:
210AVG:
35.0MIN:
10MAX:
60GROUP BY:value sum mean min max
category
A 90 30.0 10 50
B 120 40.0 20 60DISTINCT:
['A' 'B']HAVING:category value
0 A 10
2 A 30
4 A 50
1 B 20
3 B 40
5 B 60