最近遇到一个bug,是在老代码中,多年用下来都没事,但是新增业务需求就遇到问题了。经过排除,发现是由于itertools.groupby的用法与想象中不一样,至少与我熟知的pandas.groupby不太一样。在网上没看到相关的比较,于是自己写一个异同对比。
itertools.groupby与pandas.groupby的相同点# itertools.groupby
from itertools import groupby
a = groupby([1,1,2,3])
for i,j in a:
print(i,' ',len(list(j)))
# pandas.groupby
import pandas
b = pandas.Series([0,1,2,3],index=[1,1,2,3],name='b').groupby(level=0,)
b.apply(lambda x:len(x))
能看出两者都是基于一定规则的分组,但是当数据有序时,两者的分组结果是相近的。
itertools.groupby与pandas.groupby的不同点# itertools.groupby
from itertools import groupby
a = groupby([1,2,3,1])
for i,j in a:
print(i,' ',len(list(j)))
# pandas.groupby
import pandas
b = pandas.Series([0,1,2,3],index=[1,2,3,1],name='b').groupby(level=0,)
b.apply(lambda x:len(x))
能看出,当数据无序时,两者的分组结果不同。
pandas.groupby的结果与之前并无差异。但itertools.groupby的分组结果更像是相邻数据去重后再分组的结果,同样的值,如果被其他值分割的话,分组结果完全不一样。
当数据无序时,准确来说是相同值的数据不相邻时,itertools.groupby可能会产生意料之外的结果,



