2017-05-19 1 views
0

python/pandas에서 다음 작업을 수행하는 가장 좋은 방법은 무엇입니까?여러 열을 사용하여 변수를 재설정하고 pandas df의 python 함수

트렌드 데이터 2가 트렌드 데이터 1과 일치하지 않는 경우를 계산하고 경향 데이터 1이 변경 될 때마다 카운터를 재설정하려고합니다.

데이터 프레임에서 올바른 방법으로이 예제에서 새로운 열 df['D']을 만드는 데 어려움을 겪고 있습니다.

df['A'] = 트렌드 데이터 1
df['B'] = 트렌드 데이터 1
df['C'] = 트렌드 데이터 2
df['D'] = 원하는 결과 엑셀

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 

단순히 사용한다 변경할 경우 부울 지표

=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 
관련 문제