2013-03-26 1 views
3

나는 그룹에 다음과 같은 세부 목록 시도 MAM :파이썬 GROUPBY 문

details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')] 

>>for k,v in itertools.groupby(details,key=operator.itemgetter(0)): 
>> print k,list(v) 

을 그리고 이것은 위의 GROUPBY 문으로 출력 :

20130325 [('20130325', 'B')] 

20130320 [('20130320', 'A')] 

20130325 [('20130325', 'B')] 

20130320 [('20130320', 'A')] 

하지만 내 예상 출력했다 :

20130325 [('20130325', 'B'),('20130325', 'B')] 

20130320 [('20130320', 'A'),('20130320', 'A')] 

어딘가 잘못하고 있습니까?

답변

7

은 먼저 귀하의 세부 정보를 정렬 할 수 있습니다

details.sort(key=operator.itemgetter(0)) 

또는

fst = operator.itemgetter(0) 
itertools.groupby(sorted(details, key=fst), key=fst) 

 

GROUPBY 그룹 연속 일치하는 레코드를 함께.

Documentation:

GROUPBY의 동작() 유닉스의 UNIQ 필터와 유사하다. 키 기능의 값이 변경 될 때마다 중단 또는 새 그룹을 생성합니다 (동일한 키 기능을 사용하여 데이터를 정렬해야하는 이유). 이 동작은 입력 순서에 관계없이 공통 요소를 집계하는 SQL의 GROUP BY와는 다릅니다.

1

toolz 프로젝트가 아닌 스트리밍 GROUPBY을 제공

$ pip install toolz 
$ ipython 

In [1]: from toolz import groupby, first 

In [2]: details = [('20130325','B'), ('20130320','A'), ('20130325','B'), ('20130320','A')] 

In [3]: groupby(first, details) 
Out[3]: 
{'20130320': [('20130320', 'A'), ('20130320', 'A')], 
'20130325': [('20130325', 'B'), ('20130325', 'B')]}