Python数据处理(39)-分组依据(过滤)
例如,我们希望提取一个组内所有组的元素,并且大于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相反。
注意:这个顺序与迭代中的分组顺序相同,不是第一个观察到的顺序。