包含groupbypython的词条

http://www.itjxue.com  2023-01-25 20:35  来源:未知  点击次数: 

Python 数据处理(三十九)—— groupby(过滤)

filter 方法可以返回原始对象的子集.

例如,我们想提取分组内的和大于 3 的所有分组的元素

filter 的参数必须是一个函数,函数参数是每个分组,并且返回 True 或 False

例如,提取元素个数大于 2 的分组

另外,我们也可以过滤掉不满足条件的组,而是返回一个类似索引对象。在这个对象中,没有通过的分组的元素被 NaN 填充

对于具有多列的 DataFrames ,过滤器应明确指定一列作为过滤条件

在进行聚合或转换时,你可能想对每个分组调用一个实例方法,例如

但是,如果需要传递额外的参数时,它会变得很冗长。我们可以直接使用分派到组对象上的方法

实际上这生成了一个函数包装器,在调用时,它接受所有传递的参数,并在每个分组上进行调用。

然后,这个结果可以和 agg 和 transform 结合在一起使用

在上面的例子中,我们按照年份分组,然后对每个分组中使用 fillna 补缺失值

nlargest 和 nsmallest 可以在 Series 类型的 groupby 上使用

对分组数据的某些操作可能并不适合聚合或转换。或者说,你可能只是想让 GroupBy 来推断如何合并结果

我们可以使用 apply 函数,例如

改变返回结果的维度

在 Series 上使用 apply 类似

对于之前的示例数据

假设,我们想按 A 分组并计算组内的标准差,但是 B 列的数据我们并不关心。

如果我们的函数不能应用于某些列,则会隐式的删除这些列,所以

直接计算标准差并不会报错

可以使用分类变量进行分组,分组的顺序会按照分类变量的顺序

可以使用 pd.Grouper 控制分组,对于如下数据

可以按照一定的频率对特定列进行分组,就像重抽样一样

可以分别对列或索引进行分组

类似于 Series 和 DataFrame ,可以使用 head 和 tail 获取分组前后几行

在 Series 或 DataFrame 中可以使用 nth() 来获取第 n 个元素,也可以用于获取每个分组的某一行

如果你要选择非空项,可以使用关键字参数 dropna ,如果是 DataFrame ,需要指定为 any 或 all (类似于 DataFrame.dropna(how='any|all') )

与其他方法一样,使用 as_index=False 分组名将不会作为索引

你也可以传入一个整数列表,一次性选取多行

使用 cumcount 方法,可以查看每行在分组中出现的顺序

可以使用 ngroup() 查看分组的顺序,该顺序与 cumcount 的顺序相反。

注意 :该顺序与迭代时的分组顺序一样,并不是第一次观测到的顺序

Python通过Groupby实现分组

如果有对list里的元素按照某个字段进行分组的需求的话,可以通过itertools模块中的groupby实现。

举例,list中包含3个元素,希望通过country字段进行分组,再按组操作,通过itemgetter可以取dict中key。

效果:

也可以通过lambda取dict中的字段。

除此之外,还可以实现自定义分组

效果:

关于python的groupby函数

你可以把它当做一个临时变量用,比如换成a ,应该就能看懂了。不过我不太喜欢用下划线做临时变量

Python分组

前言分组原理

核心:

1.不论分组键是数组、列表、字典、Series、函数,只要其与待分组变量的轴长度一致都可以传入groupby进行分组。

2.默认axis=0按行分组,可指定axis=1对列分组。

对数据进行分组操作的过程可以概括为:split-apply-combine三步:

1.按照键值(key)或者分组变量将数据分组。

2.对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。

3.将函数计算后的结果聚合。

1 分组模式及其对象

1.1 分组的一般模式

三个要素:分组依据、数据来源、操作及其返回结果

df.groupby(分组依据)[数据来源].使用操作

1.2 分组依据的本质

1.3Groupby 对象

通过 ngroups 属性,可以访问分为了多少组:

通过 groups 属性,可以返回从 组名映射到 组索引列表的字典:

当 size 作为 DataFrame 的属性时,返回的是表长乘以表宽的大小,但在 groupby 对象上表示统计每个组的 元素个数:

通过 get_group 方法可以直接获取所在组对应的行,此时必须知道组的具体名字:

1.4 分组的三大操作

分组的三大操作:聚合、变换和过滤

2.聚合函数

2.1内置聚合函数

包括如下函数: max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod

2.2agg 方法

【a】使用多个函数

当使用多个聚合函数时,需要用列表的形式把内置聚合函数的对应的字符串传入,先前提到的所有字符串都是合法的。

【b】对特定的列使用特定的聚合函数

对于方法和列的特殊对应,可以通过构造字典传入 agg 中实现,其中字典以列名为键,以聚合字符串或字符串列表为值。

【c】使用自定义函数

在 agg 中可以使用具体的自定义函数,需要注意传入函数的参数是之前数据源中的列,逐列进行计算

【d】聚合结果重命名 如果想要对结果进行重命名,只需要将上述函数的位置改写成元组,元组的第一个元素为新的名字,第二个位置为原来的函数,包括聚合字符串和自定义函数

3 变换和过滤

3.1 变换函数与 transform 方法

变 换 函 数 的 返 回 值 为 同 长 度 的 序 列, 最 常 用 的 内 置 变 换 函 数 是 累 计 函 数:cum- count/cumsum/cumprod/cummax/cummin ,它们的使用方式和聚合函数类似,只不过完成的是组内 累计操作。

3.2 组索引与过滤

过滤在分组中是对于组的过滤,而索引是对于行的过滤

组过滤作为行过滤的推广,指的是如果对一个组的全体所在行进行统计的结果返回 True 则会被保留,False 则该组会被过滤,最后把所有未被过滤的组其对应的所在行拼接起来作为 DataFrame 返回。

在 groupby 对象中,定义了 filter 方法进行组的筛选,其中自定义函数的输入参数为数据源构成的 DataFrame 本身,在之前例子中定义的 groupby 对象中,传入的就是 df[['Height', 'Weight']] ,因此所有表方法和属性 都可以在自定义函数中相应地使用,同时只需保证自定义函数的返回为布尔值即可。

4 跨列分组

4.1 apply 的引入

4.2 apply 的使用

在设计上,apply 的自定义函数传入参数与 filter 完全一致,只不过后者只允许返回布尔值

【a】标量情况:结果得到的是 Series ,索引与 agg 的结果一致

【b】Series 情况:得到的是 DataFrame ,行索引与标量情况一致,列索引为 Series 的索引

【c】DataFrame 情况:得到的是 DataFrame ,行索引最内层在每个组原先 agg 的结果索引上,再加一层返 回的 DataFrame 行索引,同时分组结果 DataFrame 的列索引和返回的 DataFrame 列索引一致

python groupby忽略每组前几个

python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算!

对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下:

df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定语,可以有多个).mean()(对于数据的计算方式——函数名称)

另外,我们也可以过滤掉和忽略掉你不想要的组,而是返回一个类似索引对象。在这个对象中,我们分组时需要设置一个过滤条件,那么没有通过的分组的元素被NaN 填充,这样分组后被NaN 填充的数据就可以忽略了。

(责任编辑:IT教学网)

更多

推荐网络媒体文章