2016-03-27 4 views
0

私はiteritems()を実行してvalueを実行すると、それぞれが3つのキーの値の例を得るweeks_adoptedという辞書を持っています。キーはapp_idと呼ばれます)。 weeks_adopted dictは、キーがタイプ<type 'str'>であり、値が<class 'pandas.core.series.Series'>であり、dtypeboolであるキー値のペアで構成されます。ここでインデックスは基本的に一週間は(順番に週年の0-13)を参照される1 value、の一例である:私は何をしたいか値がタプルである辞書pandasを反復する方法と、最初に真と偽の値を見つける

Name: app_id_str, dtype: bool 
0  False 
1  False 
2  False 
3  False 
4  False 
5  False 
6  False 
7  False 
8  False 
9  True 
10 False 
11 False 
12  True 
13 False 
Name: app_id_str, dtype: bool 
0  False 
1  False 
2  False 
3  True 
4  False 
5  False 
6  False 
7  False 
8  False 
9  False 
10 False 
11 False 
12 False 
13 False 
Name: app_id_str, dtype: bool 
0  False 
1  False 
2  False 
3  False 
4  False 
5  False 
6  False 
7  False 
8  False 
9  False 
10 False 
11  True 
12  True 
13  True 

が最初から行の数を計算していますTrue値から最初のFalseの値まで、それぞれのキーについては明らかに各ケースを考慮します。たとえば、3番目のタプルでは、​​最初のの後に最初のTrueが表示されます。基本的にこれは、ユーザーが最初に何かを見るか(True)、その後それを放棄するか(False)、ドロップアウト率に関係します。

上記のタプルの例では、採用率は1、1、3となります。ここで

は私の現在の基本的な方法です。

for key,value in weeks_adopted.iteritems(): 
    start= value.index(True) 
    end = value.index(False) 
    adoption=end-start 
    weeks_adopted[key] = adoption 

私はこの方法でも、このエラーを取得するしかし:答えで

TypeError         Traceback (most recent call last) 
<ipython-input-32-608c4f533e54> in <module>() 
    19 for key,value in weeks_adopted.iteritems(): 
    20  print value 
---> 21  start= value.index(True) 
    22  end = value.index(False) 
    23  adoption=end-start 

TypeError: 'Int64Index' object is not callable 

、あなたは私が必要とする他のどのようなチェックで私を助けることができるしてください最初の真と最後の値を見つけることをやっているのですか?私はこのタイプのループが多くの状況で共通のものであると推測していますか?

+0

を? intとbooleanのペアを持つタプルの辞書?ブール値を持つ辞書のタプル?ループされた出力ではなく、定義された再現可能な構造を提供してください。 – Parfait

+0

こんにちは@パルフェット、変更を参照してください。 –

答えて

1

あなたはこれを試すことができます正確に `weeks_adopted`の構造をある何

def calc_adoption(ts): 
    true_index = ts[ts].index 
    if len(true_index) == 0: 
     return 0 
    first_true_index = true_index[0] 
    false_index = ts.index.difference(true_index) 
    false_index = false_index[false_index > first_true_index] 
    if len(false_index) == 0: 
     return 14 - first_true_index 
    return false_index[0] - first_true_index 

adopted_weeks = {k: calc_adoption(v) for k, v in weeks_adopted.iteritems()} 
+0

ありがとう、この論理は理にかなっています。「File」 "行31を受け取ります。 adopt_weeks = [k:calc_adoption(v)for k、v weeks_2] :無効な構文 'しかし? –

+0

私は 'test = {} を使用しました。weeks_adopted.iteritems(): test [k] = calc_adoption(v)' –

関連する問題