2017-11-01 4 views
-1

그룹화하는 동안 집계 단계에서 하나의 특정 열에 하나의 사용자 지정 람다 함수가 적용되는 this post을 참조하고 있습니다.Python Pandas : 하나의 groupby 열에 사용자 정의 함수 적용

In [67]: f = {'A':['sum','mean'], 'B':['prod'], 'D': lambda g: df.ix[g.index].E.sum()} 

In [69]: df.groupby('GRP').agg(f) 
Out[69]: 
      A     B   D 
      sum  mean  prod <lambda> 
GRP 
0 0.719580 0.359790 0.102004 1.170219 
1 0.454824 0.227412 0.034060 1.182901 

열 A와 B를 명시 적으로 지정하지 않아도 가능하면 관심이 있습니다. 총계 또는 표준과 같은 표준 방법이 열 D 및 사용자 지정 람다 함수을 제외한 모든 열을 열 D에만에 적용하는 방법을 찾고 있습니다. 이 같은

뭔가 : 그것은 모든 열에 있다면

f = {'sum', 'D': lambda g: df.ix[g.index].E.sum()} 

답변

1

, 그냥 간단한 목록 comprhension를 만든 다음 충분해야한다는, D를 업데이트합니다.

# default aggregate function for all columns  
f = {x : 'sum' for x in df.columns} 

# override custom function for specific column 
f['D'] = lambda g: df.loc[g.index].E.sum() 

# apply aggregate to groupby 
df.groupby('GRP').agg(f).reindex(columns=df.columns) 


      A   B   C   D   E GRP 
GRP              
0 0.719581 0.684144 0.707859 1.170218 1.170218 0 
1 0.454824 0.523983 0.181761 1.182902 1.182902 2 
+0

흠, 그 해결책에 대해서도 생각해보십시오. 현재 두 개의 groupby-agg 작업을 수행 중이며 색인을 기반으로 두 결과를 결합합니다. 하지만 당신의 솔루션은 성능면에서 더 좋아야합니다. – Matthias

+0

네, 훨씬 더 간단합니다. 명령을 복원하려면'reindex'를 호출하십시오. 그것을 포함하도록 내 대답을 편집했습니다. –

관련 문제