通过partial构造Pandas分组规则

Pandas通常可以用groupby来对某一列进行分组,例如:

df = pd.read_csv("sugars.csv",header=None)
df.columns=["time","pop"]
#分组groupby(字段名)则直接对其进行分组
df.groupby("pop").count()

但如果我想求人口数为单数的分组类型,可以向groupby直接加入一个函数:

df.index = df["pop"]
#设定规则函数
def group_mod2(value):
    return value%2
    #将规则作为变量直接输入
    groupbydf3 = df.groupby(group_mod2).count()
df3
   time  pop0    
   14   141  
   18   182    
   16   16

直接将设定的函数作为参数导入groupby函数中就可以,但值得注意的是groupby作为闭包向group_mod2传递的参数默认为是DataFrame的index值,当然如果需要指定某列可以将其设定为index,也可以改为:

#如设定pop为规则字段
df.groupby(group_mod2(df["pop"])).count()

当然这样设置的参数就很不灵活了,因此在设置分组规则时可以用partial来代替,这样就可以灵活的对规则进行复用:

#设定分组规则
def group_regular(value, mod):
    return value%mod    
from functools
import partial
df2 = df.groupby(partial(group_regular,mod=3)).count()




-----------sugar---------------shikanon.com-----------------sugar-----------------sugar---




你可能感兴趣的:(groupby,pandas,分组规则)