2016-12-23 3 views
1

값이 0 인 변수가있는 데이터 세트가 있습니다.은 python, pandas에서 보유합니다.

출력 방법은 다음과 같습니다.

가변 - 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에서는 꽤 쉬웠지만 팬더에서는 어려웠습니다. SAS와 같은 팬더에 특정 보존 기능이 있습니까? 나는 팬더 문서에서 어떤 기능도 보지 못합니다.

미리 감사드립니다.

답변

2

난 당신이 0cumsum과 비교할 필요가 있다고 생각 : 이것처럼

,

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] 답변에 대한

관련 문제