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 functoolsimport partialdf2 = df.groupby(partial(group_regular,mod=3)).count()
-----------sugar---------------shikanon.com-----------------sugar-----------------sugar---