GIS之时空数据分析

Python groupby、aggregate、apply、t

2021-09-03  本文已影响0人  王叽叽的小心情

Python中的pandas包中经常用到groupby的功能,基于经常与它联系在一起的apply, agg(aggregate)以及transform函数。下面对这四个函数做简要介绍,并给出常用代码示例。

0 几个函数的异同

groupby+agg简单总结:
groupby的功能:第一步,针对一个python的dataframe,函数groupby按照某一个/几个列/行的属性值进行分组筛选,返回结果为一个GroupBy对象,实质是一个字典,index是属性值,value是筛选出来的子dataframe,这一步可以简单理解为dataframe的拆分。
agg, apply, transform:第二步是数值统计与变换,针对不同index下得到的子dataframe,可以汇总计算它的统计属性,比如平均值、最大值、总和等等,这里面最简单的方法是采用agg进行,除此之外,还有transform,apply和filter功能(filter就不讲了)。

agg, transform, apply不同之处:
transform:针对dataframe的列的元素进行操作,因此返回的dataframe与原来等长,但不在原位进行操作。对于用平均值弥补缺失值很有用。
agg:常用操作,与Python内置函数结合运行速度比较快
apply:可以替代上述两个,比较灵活,在自定义函数下也可改变返回值的形状,也可以处理一些特殊情况。

下面分别详细介绍每一个函数。

1. pandas.DataFrame.groupby()

函数形式:DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=<no_default>, observed=False, dropna=True)

函数功能:groupby操作涉及拆分对象、应用函数和合并结果的某种组合。这可以用于对大量数据进行分组,并在这些分组上计算操作。

参数解读:

简单用法:
结合aggregate的最常见用法为:

df.groupby(by=['a', 'b']).agg({'age': 'sum', 'gender': 'mean'})
2. pandas.DataFrame.agg

函数形式:DataFrame.agg(func=None, axis=0, *args, **kwargs)

函数功能:针对特定的轴进行一个或者多个聚合操作。

参数解读:

简单应用:

# 针对每一列进行不同操作
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})

# 针对不同列进行多项操作,并进行重命名
df.agg(x=('A', max), y=('B', 'min'), z=('C', np.mean))

里面可以用到的Python内置函数包括以下几个。推荐使用agg()和python内置函数进行运算。

count() – Number of non-null observations
sum() – Sum of values
mean() – Mean of values
median() – Arithmetic median of values
min() – Minimum
max() – Maximum
mode() – Mode
std() – Standard deviation
var() – Variance

更详细的列表参见https://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html

3. pandas.DataFrame.apply

函数形式:DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)

函数功能:沿着dataframe的轴进行操作。

参数解读:

简单应用

df.apply(np.sum, axis=1)

# 'expand': 返回值为列表类型
df.apply(lambda x: [1, 2], axis=1, result_type='expand')
   0  1
0  1  2
1  1  2
2  1  2
# 'broadcast':结果将被广播到原始形状的DataFrame,原始的索引和列将被保留。
df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')
   A  B
0  1  2
1  1  2
2  1  2

apply常用自定义函数,但自定义函数的效率慢。

4. pandas.DataFrame.transform

函数形式:DataFrame.transform(func, axis=0, *args, **kwargs)

函数功能:调用func函数生成带有转换值的DataFrame,生成的DataFrame将具有与self相同的轴长。

参数解释:同上。

简单代码:

# 采用lambda表达式
df.transform(lambda x: x + 1)

# 针对GroupBy对象
df.groupby('Date')['Data'].transform('sum')
df.groupby('c')['type'].transform(len)
df.groupby('key').transform(lambda x: x.fillna(x.mean()))

完结~

上一篇 下一篇

猜你喜欢

热点阅读