2016-07-07 2 views
-1

Python에 비교적 새로운 기능을 작성하는 방법을 배우려는 Im입니다. this post에 대한 답은 데이터 프레임에서 특정 통계를 얻는 방법을 강조하고 함수에서 사용하고 싶습니다.Python의 함수에 통계 코드 추가하기

이 내 시도하지만 그것은 AttributeError: 'SeriesGroupBy' object has no attribute 'test_for_B' 작동하지 않습니다 :

def test_multi_match(df_in,test_val): 
    test_for_B = df_in == test_val 
    contigious_groups = ((df_in == test_val) & (df_in != df_in.shift())).cumsum() + 1 
    counts = df_in.groupby(contigious_groups).test_for_B.sum() 
    counts.value_counts()/contigious_groups.max() 

사람은 내가 다른 데이터 프레임에 재사용 할 수있는 기능이 코드를 넣어 도와 주시겠습니까? 감사.

편집 : 이제 큰 속성 오류가 제거되었습니다.이 답변을 받았습니다. 여기

+0

'rng.df_in'합니다. 'rng'는 당신의 코드 어디에도 정의되어 있지 않습니다. –

+0

오류 메시지가 분명합니다 : 당신의 함수의 3 번째 줄에'df.df_in'을 호출합니다. 이것은 함수의 입력을 고려해 볼 때 적합하지 않습니다. – IanS

+0

는 오타가 있지만 여전히 ''SeriesGroupBy ' test_for_B'' – ade1e

답변

1

당신은 이동 :

def repeat_stats(series, var): 
    isvar = series == var 
    wasntvar = series != series.shift() 
    cont_grps = (isvar & wasntvar).cumsum() 
    counts = isvar.loc[cont_grps.astype(bool)].groupby(cont_grps).sum() 
    return counts.value_counts()/cont_grps.max() 

repeat_stats(rng.initial_data, 'B') 

3.0 0.5 
2.0 0.5 
Name: initial_data, dtype: float64 
+0

이것은 훌륭합니다. 나는 그것이 내가 필요로하는 것을 정확하게 할 수 있음을 확신 할 수 있습니다. 배울 점이 많습니다 ... 감사합니다. – ade1e