2016-12-23 10 views
1

私は値0,1の変数を持つデータセットを持っています。pythonで保持、パンダ

次のような出力が必要です。

変数 - 0 1 1 1 0 1 1 1 0 1 1 0

フラグ - 1 1 1 1 2 2 2 2 3 3 3 4

たびに変数の変化に0フラグがインクリメントべき1であり、次の0に遭遇するまで同じままでなければなりません。

私はSASからPythonへのコード変換を行っています。 SASでかなり簡単でしたが、私はPandasでそれが難しいと思っています。 SASのようなパンダに特定の保持機能はありますか?私はpandasのドキュメントには何の保持機能も見当たりません。

ありがとうございました。

私はあなたが 0cumsumとの比較が必要だと思う

答えて

2

s = pd.Series([ 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0]) 
print (s) 
0  0 
1  1 
2  1 
3  1 
4  0 
5  1 
6  1 
7  1 
8  0 
9  1 
10 1 
11 0 
dtype: int64 

s1 = (s == 0).cumsum() 
print (s1) 
0  1 
1  1 
2  1 
3  1 
4  2 
5  2 
6  2 
7  2 
8  3 
9  3 
10 3 
11 4 
dtype: int32 

df = pd.DataFrame({'Variable': [ 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0]}) 
df['Flag'] = (df.Variable == 0).cumsum() 
print (df) 
    Variable Flag 
0   0  1 
1   1  1 
2   1  1 
3   1  1 
4   0  2 
5   1  2 
6   1  2 
7   1  2 
8   0  3 
9   1  3 
10   1  3 
11   0  4 
+0

感謝。私は累積合計したくない、私はちょうど可変の列で0に遭遇すると、フラグ変数の値をカウント1で増加したい。 – Haritha

+0

わかっていればわかりません - neww列が必要ですか?その後、最後の編集を参照してください。 – jezrael

0

代わりのパンダを使用して、ちょうどあなたがループを使用することができ、

このよう

a='0 1 1 1 0 1 1 1 0 1 1 0' 
flags=[] 
flag=0 
for i in list(a.split()): 
    if int(i)==0: 
     flag+=1 
     flags.append(flag) 
    else: 
     flags.append(flag) 

print flags 

出力:

[1、1、1、1、2、2、2、2、3、3、3、4]あなたの答えのための

関連する問題