程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

itertools.groupby與pandas.groupby的異同

編輯:Python

背景

最近遇到一個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可能會產生意料之外的結果,


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved