当前位置:首页 > 行业动态 > 正文

python 分组函数

Python分组函数通常用于对数据进行分类和聚合,如groupby()。

在Python中,分组(grouping)是一种常见的数据处理操作,通常我们会使用pandas库中的groupby方法来实现数据的分组。groupby可以根据一个或多个键(可以是函数、数组或DataFrame列名)对数据进行分组。

基本用法

单列分组

假设我们有一个包含不同城市及其人口的DataFrame,我们可以按照城市来分组:

import pandas as pd
data = {
    'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Beijing', 'Shanghai'],
    'Population': [2154, 2424, 1303, 1253, 2169, 2438]
}
df = pd.DataFrame(data)
grouped = df.groupby('City') 

多列分组

我们也可以根据多个列进行分组:

grouped = df.groupby(['City', 'Population']) 

聚合操作

分组后,我们通常会进行一些聚合操作,例如求和、平均值、最大值、最小值等:

求和
sums = grouped.sum()
平均值
means = grouped.mean()
最大值
max_values = grouped.max()
最小值
min_values = grouped.min() 

高级用法

自定义聚合函数

除了内置的聚合函数外,我们还可以使用自定义函数:

def custom_agg(x):
    return x.sum() / len(x)
result = grouped.agg(custom_agg) 

变换操作

groupby对象还支持一些变换操作,如cumsum(累计求和)、cumprod(累计乘积)等:

累计求和
cumsum = grouped.cumsum()
累计乘积
cumprod = grouped.cumprod() 

过滤操作

我们还可以根据分组的结果进行过滤:

过滤出人口大于2000的城市的分组
filtered = grouped.filter(lambda x: x['Population'].sum() > 2000) 

相关问题与解答

Q1: 如何在分组后的数据上应用多个聚合函数?

A1: 可以在agg函数中使用字典来指定不同的聚合函数:

agg_result = df.groupby('City').agg({'Population': ['sum', 'mean']}) 

Q2: 如何使用自定义函数对特定的列进行聚合?

A2: 可以在agg函数中使用列名和自定义函数的组合:

def custom_function(x):
    return x.sum() / len(x)
agg_result = df.groupby('City').agg({'Population': custom_function}) 

Q3: 如何在分组后的数据上进行排序?

A3: 可以使用sort_values方法对分组后的数据进行排序:

sorted_grouped = grouped.sort_values('Population', ascending=False) 

Q4: 如何获取分组后的某个组的数据?

A4: 可以使用get_group方法获取特定组的数据:

beijing_group = grouped.get_group('Beijing') 
0