2016-06-21 6 views
3

과 비슷한 기능이 있습니까? 먼저 groupby 호출이 필요하지 않습니까?먼저 groupby를 거치지 않고 통화하기

예를 들어 나는 종종 agg 맵을 작성하고 전체 테이블에 대한 맵을 평가하려고합니다.

그래서 나는 그에서 집계 한 후 가짜 키를 삽입에 의해 나는 현재이 작업을 수행

data = data.groupby("key").agg({"foo1":"sum", "foo2":"mean"})

data = data.agg({"foo1":"sum", "foo2":"mean"})

에 변경하고 싶습니다. 그러나 그것은 해킹입니다. 더 좋은 방법이 있습니까?

답변

2

UPDATE :은 코멘트에서 제안 @root, 그것은 np.repeat(0, len(df))에 의해 그룹에 더 쉽고 우아한 것 :

In [5]: df.groupby(np.repeat(0, len(df))).agg({'A':'sum', 'B':'mean', 'C':'min'}) 
Out[5]: 
     B A C 
0 42.9 484 21 

OLD 답 :

당신이 숫자를 가지고 있다고 가정을 항상 >= 0입니다 인덱스 :

In [139]: df.groupby(df.index >= 0, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'}) 
Out[139]: 
    A  B C 
0 484 42.9 21 

또는 인덱스가없는 가정 어떤 NaN

In [140]: df.groupby(df.index==df.index, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'}) 
Out[140]: 
    A  B C 
0 484 42.9 21 

색인가 NaN의 사용 다음 트릭을 할 수있는 경우

:

In [160]: df.groupby(pd.notnull(df.index) | pd.isnull(df.index), as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'}) 
Out[160]: 
    A  B C 
0 484 42.9 21 

데이터 :

In [138]: df 
Out[138]: 
    A B C 
0 34 45 68 
1 71 62 61 
2 39 51 33 
3 38 62 27 
4 16 39 21 
5 94 41 41 
6 14 11 41 
7 76 40 29 
8 44 34 70 
9 58 44 68 
+1

당신은 할 수 없습니다 인덱스에 대해 걱정할 필요없이'np.repeat (1, len (df))'또는 이와 동등한 목록 이해력으로 그룹화하면됩니까? – root

+0

@ 뿌리, 좋은 캐치, 고마워요! – MaxU

+0

문제는 없지만 답을 보지 않고서는 생각하지 못했을 것입니다! 좀 더 생각해 보면'np.repeat (0, len (df))'가 약간 더 좋을 것이므로 결과 인덱스는'1' 대신에'0'이므로 일반적인 규칙과 일관성이 있습니다. – root

관련 문제