2012-07-15 3 views
3

나는 팬더의 코너 케이스를 때리고있다. agg fn을 사용하려고하는데 groupby를하지 않고. 즉팬더에서 빈 열 집합에 groupby를 수행하는 방법은 무엇입니까?

from pandas import * 
DF = DataFrame(randn(5,3), index = list("ABCDE"), columns = list("abc")) 
DF.groupby([]).agg({'a' : np.sum, 'b' : np.mean }) # <--- does not work 

그리고 DF.agg({'a' ... }) 중 하나가 작동하지 않습니다, 나는 전체 dataframe에 집계 싶은 말은.

내 해결 방법은 DF['Total'] = 'Total'을 수행 한 다음 DF.groupby(['Total'])을 수행하는 것입니다.하지만 이는 다소 인공적인 것으로 보입니다.

더 깨끗한 해결책을 가진 사람이 있습니까?

답변

3

그것도 그리 좋은 건 아니지만, 당신은 함수를 전달하면이 경우에, 적어도이 df 변경 필요하지 않습니다 진정한 반환 :

>>> from pandas import * 
>>> df = DataFrame(np.random.randn(5,3), index = list("ABCDE"), columns = list("abc")) 
>>> df.groupby(lambda x: True).agg({'a' : np.sum, 'b' : np.mean }) 
      a   b 
True 1.836649 -0.692655 
>>> 
>>> df['total'] = 'total' 
>>> df.groupby(['total']).agg({'a' : np.sum, 'b' : np.mean }) 
       a   b 
total      
total 1.836649 -0.692655 

대신 lambda x: True의 다양한 내장 매크로를 사용할 수 있지만 ' 덜 명확하고 우연히 만 작동합니다.

2

비슷한 방법을 사용하는 것이 좋습니다. 여기에 문제를 만들기 :

https://github.com/pydata/pandas/issues/1623

+0

쿨 @Wes 맥키 니 - 아마도 당신은 또한 DF.groupby이 ([]) DF를 반환 할 수 있을까? Thx – joelhoro

+0

나는 또한'np.std'와 같은 일부 함수에 대해'IndexError : 0-d 배열을 인덱싱 할 수 없습니다 .'라는 오류를 발견했습니다. 그것은 판다 시리즈의 여분의 구조를 질식시키는 것처럼 보입니다. 만약 당신이'lambda x : np.std (x.values)'를 전달 함수로 사용한다면,이를 수정한다. 그러나 이것이 팬더의 책임이되어야하는 것 같습니다. try-catch 일종의 if가 작동하지 않는다면 포기하기 전에 column.values에 적용 해보십시오. 이것을 피하는 데는 충분한 이유가있을 수 있습니다. 그냥 제안. – ely

+0

@EMS 당신이보고있는 것을 재현하는 문제를보고 할 수 있습니까? –

관련 문제