2017-04-04 1 views
2

저는 Pandas through Python을 배우는 데 약 3 일 걸려서 저를 곤란하게 만든 첫 번째 문제를 보았습니다. 나는 내가 처리하고있는 테이블의 각 행을 반복하지 않아도되는 다양한 계산을 할 수 있었지만 다음 문제로 같은 작업을 수행 할 수있는 방법이 있는지 확실하지 않습니다.python/pandas에서 자체적으로 기반으로하는 열 계산

이 문제를 해결하기 위해 노력하고있는 표는 단지 ​​2 열로 요약 될 수 있습니다. 첫 번째 열은 '날짜'이고 두 번째 열은 '주문'입니다. 'order'열은 거의 0의 값을 가지며 소수의 1과 -1이 산재되어 있습니다. 뿐만 아니라 '상태에

  Date Order 
0 2017-03-15  0 
1 2017-03-14  1 
2 2017-03-13  0 
3 2017-03-12  0 
4 2017-03-11  -1 
5 2017-03-10  0 
6 2017-03-09  0 
7 2017-03-08  1 

내가'순서 '열을 기반으로 처음이다'상태 '라는 또 다른 컬럼을 추가 싶어 ... 내 질문하지만, 뭔가 같은에서 그 표시 방법을 잘하지 '열의 값에 따라 다릅니다.

Excel에서 상태 열에 수식을 추가하는 경우 : = if (순서 = 1, 1, if (순서 = -1, -1, 상태 [행 -1]))

그래서 결과 테이블은 다음과 같이 보일 것이다 :

  Date Order Status 
0 2017-03-15  0  0 
1 2017-03-14  1  1 
2 2017-03-13  0  1 
3 2017-03-12  0  1 
4 2017-03-11  -1  -1 
5 2017-03-10  0  -1 
6 2017-03-09  0  -1 
7 2017-03-08  1  1 

상태 열은 초기 분류 후 (하지만 그 때까지 0의 시작 수), 단 1 -1로 끝날 것이다. 순서 열은 대체로 1과 -1 (번갈아 놓은 0과는 별도로)을 사용하지만 순서 열에는 1이있을 수 있습니다. 예를 들어 다음 행에 또 다른 1이 오거나 몇 행이 이어지는 경우도 있습니다. -1 전에 무시할 수있는 입력 데이터 오류이지만 코드에서이를 처리해야 할 수도 있습니다.

현재 팬더를 사용하고 있지만 필요한 경우 numpy를 사용할 수도 있습니다.

충분히 명확하길 바랍니다. 형편없는 서식을 용서하십시오. 그리고 도움의 손길에 감사드립니다.

답변

3

조합의 mask, ffill

o = df.Order 
df.assign(Status=o.mask(o == 0).ffill().fillna(o).astype(int)) 

     Date Order Status 
0 2017-03-15  0  0 
1 2017-03-14  1  1 
2 2017-03-13  0  1 
3 2017-03-12  0  1 
4 2017-03-11  -1  -1 
5 2017-03-10  0  -1 
6 2017-03-09  0  -1 
7 2017-03-08  1  1 
+0

fillna 그 주셔서 감사합니다. 방금 시도했는데 효과가있었습니다. 출력을 계속 유지하려면 두 번째 줄 앞에 'df ='를 추가해야했습니다. 그것은 어떻게 그리고 왜 그것이 작동하는지 파악하기 위해 나에게 약간의 숙제를 준다! –