Python数据处理(39)-分组依据(过滤)

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

例如,我们希望提取一个组内所有组的元素,并且大于3。

filter的参数必须是函数,函数参数是每个分组,它返回True或False。

例如,提取包含2个以上元素的组。

此外,我们还可以过滤掉不符合条件的组,返回一个相似的索引对象。在此对象中,失败分组的元素由NaN填充。

对于具有多列的数据帧,过滤器应该明确指定一列作为过滤条件。

在聚合或转换过程中,您可能希望为每个组调用一个实例方法,例如

但是,如果需要传递额外的参数,就会变得非常冗长。我们可以直接使用分配给组对象的方法。

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

然后,该结果可以与agg和transform结合使用。

在上面的例子中,我们按年份分组,然后使用fillna来填充每个组缺少的值。

Nlargest和nsmallest可用于Series类型的groupby。

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

例如,我们可以使用应用功能

更改返回结果的维度

在系列上使用apply与此类似。

对于先前的样本数据

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

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

直接计算标准差不会报告错误。

分类变量可用于分组,分组顺序将按照分类变量的顺序。

可以用pd。Grouper控制分组,用于以下数据。

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

列或索引可以单独分组。

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

可以使用nth()获取Series或DataFrame中的第n个元素,也可以使用它获取每个组的一行。

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

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

也可以传入一个整数列表,一次选择多行。

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

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

注意:这个顺序与迭代中的分组顺序相同,不是第一个观察到的顺序。