2014-08-27 6 views
2

지금부터 나는 Pandas에 큰 데이터 프레임을 가지고 있으며, 통계를 기반으로 더 작은 그룹을 만들려고합니다. 이 그룹은 순열을 생성하기 위해 반복됩니다. 이것은 조금 복잡하지만, 여기에 예입니다(Pandas, Python 3)

데이터 프레임

지금 그러나이

KW  POS   KW  POS   KW  POS 
Cat  Noun   in  Prep   Brown Adj 
hat  Noun   Prep  Prep 

같은 POS에 따라 3 개 그룹을 생성한다을하려고하고 무엇

KW   POS  
Cat   Noun    
in   Prep    
the   Prep 
Brown   Adj    
hat   Noun  

, 나는 그들이 유일한 그룹이되어야한다고 생각하는 이유는이 그룹들이 단어 순열을 창조하기 위해 반복 될 것이다. 즉 그룹 1의 단어, 그룹 2의 단어, 그룹 3의 단어.

질문은 입니다. 1) 다음과 같은 그룹화 방법을 사용하면 순열을 만들 수 있습니까?

group = newlist.groupby(['POS']) 

2. 그렇지 않은 경우, 반복하는 데 적합한 작은 데이터 프레임을 어떻게 만듭니 까?

답변

1

순회는 GROUPBY 생각 (또는 SeriesGroupby)은 해당 그룹에서 키와 서브 프레임/시리즈를 산출 :

In [11]: {k: v for (k, v) in g['KW']} # equivalently/cryptically: dict(iter(g['KW'])) 
Out[11]: 
{'Adj': 3 Brown 
     Name: KW, dtype: object, 
'Noun': 0 Cat 
     4 hat 
     Name: KW, dtype: object, 
'Prep': 1  in 
     2 the 
     Name: KW, dtype: object} 

IIUYC 아마 약간의 숨겨진 팬더 'cartesian_product을 (사용으로 볼 수있다. ..) :

In [12]: pd.tools.util.cartesian_product(res.values()) 
Out[12]: 
[array(['Cat', 'Cat', 'hat', 'hat'], dtype=object), 
array(['Brown', 'Brown', 'Brown', 'Brown'], dtype=object), 
array(['in', 'the', 'in', 'the'], dtype=object)] 

다음지도, 우편, (당신이 원하는 것을 얻을해야 조합에 가입) 같은 :

In [13]: map(' '.join, zip(*_)) 
Out[13]: ['Cat Brown in', 'Cat Brown the', 'hat Brown in', 'hat Brown the']