2016-07-07 4 views
-1

Pythonには比較的新しく、関数を書く方法を学ぼうとしています。 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

typoが修正されましたが、属性エラー' '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

関連する問題