2014-10-21 4 views
0

작은 크기의 그룹을 필터링하려고하는데 필터 함수가 ValueError를 발생시킵니다. 음수 값은 허용되지 않습니다. 나는 너무 구체적인 코드를 게시하지 않으며 임의의 데이터 세트로 문제를 재현 할 수 없습니다. 아무도 이것을 보지 못했습니까? 나는 같은 오류에 대한 다른 게시물을 보았지만 너무 도움이되지 않았다.팬더 데이터 프레임이 작은 크기의 그룹을 필터링합니다.

해결 방법으로 groupby와 동일한 작업을 수행하려고하는데 필터가 적용되지만 예상대로 작동하지 않습니다. . 어떤 제안?

 dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')}) 
     dff['C'] = np.arange(8) 

     def f(x): 
     if len(x)>2: 
      return x 
     else: 
      return None 
     dff.groupby('B').apply(f) 

     B 
     a   A B C 
     2 NaN NaN NaN 
     3 NaN NaN ... 
     b  A B C 
     2 2 b 2 
     3 3 b 3 
     4 4 b 4 
     5 ... 
     c   A B C 
     2 NaN NaN NaN 
     3 NaN NaN ... 
     dtype: object 
+0

간단한 'dff.where (dff> 2)'로 충분하지 않습니까? – Manhattan

+0

@ Nanashi : 아니오. 값이 2보다 큰 데이터 프레임 값을 반환합니다. OP는 열을 그룹화하고 두 개 이상의 행이있는 그룹 만 가진 데이터 프레임을 반환하려고합니다. – exp1orer

답변

1

귀하의 예제 코드의 문제점은 apply 다시 함께 dataframe 퍼팅 때 None으로 무엇을 해야할지하지 않습니다. apply 함수는 매번 동일한 유형의 객체를 출력해야합니다. None 대신에 pd.DataFrame()을 돌려 주면 찾고있는 것을 얻어야합니다.

+0

그게 다야! 감사! def f (x) : len (x)> 2 인 경우 : return x else : pd.DataFrame (columns = x.columns)을 반환하십시오. dff.groupby ('B', group_keys = False) .apply (f) ' – Lamakaha

관련 문제