2017-10-18 4 views
1

나는 간단한 초기 dataframe이 : 내가 전화를 복합 인 경우 파이썬 팬더 : Dataframe 오류에 DataFrameGroupBy 객체 색인화

ID, ATTRIBUTE 
1, thing2 
1, thing3 
1, thing3 
2, thing7 
2, thing7 
2, thing2 
3, thing1 
3, thing2 

나는 내가 (속성의 모드 어디서 만들 간단한 GROUPBY 개체가를 그 결과 'multithing') : 그 재색 후 결과를 얻기 위해 노력하고

mode = lambda x: x.mode() if len(x) > 2 else 'multithing' 
df_grouped = df.groupby(['ID'], as_index=False)['ATTRIBUTE].agg(mode) 

은 다음과 같습니다

ID, ATTRIBUTE 
1, thing3 
2, thing7 
3, multithing 
,

그래서 나는이 같은 일을 다시 일반 dataframe처럼 사용 할 수 있습니다

df_final.groupby('ATTRIBUTE')['ID'].count() 

답변

2

IIUC :

In [203]: df.groupby('ID')['ATTRIBUTE'] \ 
      .agg(lambda x: x.mode()[0] if len(x.mode()) == 1 else 'multithing') 
Out[203]: 
ID 
1  thing3 
2  thing7 
3 multithing 
Name: ATTRIBUTE, dtype: object 

또는

In [205]: df.groupby('ID', as_index=False)['ATTRIBUTE'] \ 
    ...: .agg(lambda x: x.mode()[0] if len(x.mode()) == 1 else 'multithing') 
Out[205]: 
    ID ATTRIBUTE 
0 1  thing3 
1 2  thing7 
2 3 multithing 
+0

두 번째는 완벽합니다. 이전에 람다 함수를 잘못 처리 한 것을 봅니다. – Pylander

+0

마지막 질문 하나 있으면 괜찮습니까? 이 경우 람다 모드는 ATTRIBUTE에 대한 np.nan 값을 무시합니까? 난 단지 그것이 아닌 null 값의 모드를 찾을 싶습니다. – Pylander