2017-05-19 8 views
0

python/pandasで次のようにするにはどうすればよいですか?複数の列を使用して変数をリセットしたpandas dfのpython関数

トレンドデータ2がトレンドデータ1と並んでいないときの発生をカウントし、トレンドデータ1が変化するたびにカウンタをリセットしたいとします。

この例では、新しい列df['D']を作成するデータフレーム上で正しい方法でそれを行うのに苦労しています。

df['A'] =トレンドデータ1
df['B'] =トレンドデータ1が
df['C'] =トレンドデータ2
df['D'] =所望の結果Excelで

df['A']  df['B']  df['C']  df['D']    
    1    0    1   0 
    1    0    1   0 
-1    1    -1   0 
-1    0    -1   0 
-1    0    1   1 
-1    0    -1   1 
-1    0    -1   1 
-1    0    1   2 
-1    0    1   2 
-1    0    -1   2 
    1    1    1   0 
    1    0    1   0 
    1    0    -1   1 
    1    0    1   1 
    1    0    -1   2 
    1    0    1   2 
    1    0    1   2 

iは単に使用する変更された場合ブールインジケータ:

=IF(B2=1,0,IF(AND((C2<>C1),(C2<>A2)),D1+1,D1)) 

しかし、私はいつも苦労していますパンダの先の細胞を参照することができない。

np.where()は使用できません。私はそれが正しい方法で関数を適用するだけだと確信していますが、私はそれが他の列を参照して変数をリセットするように働かせるように見えません。私は他の答えを見てきましたが、この状況では何かを見つけることができません。

何か

  • のようなノート:私はこの質問ではなく、単純だがちょうどラウンド続ける何かが欠けていると感じて、df['E'] = df['C'].shift(1)

def corrections(x):

if df['B'] == 1:  
     x = 0 
    elif ((df['C'] != df['E']) AND (df['C'] != df['A'])): 
     x = x + 1 
    else: 
     x 

謝罪を作成サークルで!

+0

質問を編集して、2の最初のグループがどこから来たのかを説明できますか? – DSM

答えて

0
def make_D (df): 

    counter = 0 

    array = [] 

    for index in df.index: 

     if df.loc[index, 'A']!=df.loc[index, 'C']: 

      counter = counter + 1 

     if index>0: 

      if df.loc[index, 'B'] != df.loc[index-1, 'B']: 

       counter = 0 

     array.append(counter) 

    df['D'] = array 

    return (df) 

new_df = make_D(df) 

それが役に立てば幸い!

0
#Set a list to store values for column D 
d = [] 

#calculate D using the given conditions 
df.apply(lambda x: d.append(0) if ((x.name==0)|(x.B==1)) else d.append(d[-1]+1) if (x.C!=df.iloc[x.name-1].C) & (x.C!=x.A) else d.append(d[-1]), axis=1) 

#set columns D using values from the list d. 
df['D'] = d 

Out[594]: 
    A B C D 
0 1 0 1 0 
1 1 0 1 0 
2 -1 1 -1 0 
3 -1 0 -1 0 
4 -1 0 1 1 
5 -1 0 -1 1 
6 -1 0 -1 1 
7 -1 0 1 2 
8 -1 0 1 2 
9 -1 0 -1 2 
10 1 1 1 0 
11 1 0 1 0 
12 1 0 -1 1 
13 1 0 1 1 
14 1 0 -1 2 
15 1 0 1 2 
16 1 0 1 2 
関連する問題