2017-03-15 2 views
0

Visits2라는 20M 레코드가 포함 된 팬더 데이터 프레임이 있습니다. 다음은 Visits2의 레코드 샘플입니다.데이터 프레임을 통해 반복되는 최적화 된 방법

num   srv_edt  inpt_flag 
000423733A 8/15/2016 N 
001013135D 7/11/2016 N 
001013135D 7/11/2016 N 
001047851M 4/29/2016 N 
001067291M 2/29/2016 Y 
001067291M 8/3/2016 N 
001067291M 8/3/2016 N 
001067291M 9/4/2016 N 
001070817A 5/25/2016 N 
001070817A 5/25/2016 Y 
001072424A 1/13/2016 N 
001072424A 2/17/2016 Y 
001072424A 3/21/2016 N 
001072424A 3/21/2016 N 
001072424A 5/10/2016 N 
001072424A 6/6/2016 N 

난 srv_edt가 NUM 군에서 발생 제는 N와 inpt_any 할당 코드 아래 실행하고있다. inpt_flag의 값이 이미 Y 인 경우 inpt_flag에 Y을 할당합니다.

이것은 잘 돌아가고 있지만, 20M 볼륨으로 생각하면 실행하는 데 시간이 걸립니다. 누군가, 데이터 프레임을 반복하는 방법을 제안 해주십시오.

prev_srv_edt = " " 
for vv in Visits2.itertuples(): 
    inpt_any = 'N' 
    if (prev_srv_edt != vv[1]): 
     prev_srv_edt = vv[1] 
     Visits2.loc[vv[0],'inpt_any'] = 'N' 
    if (vv[2] == 'Y'): 
     Visits2.loc[vv[0],'inpt_any'] = 'Y' 

내가 list(zip(visit['srv_edt'],visit['inpt_flag']))와 함께 시도 않았다,하지만 난 zip 또한 실행하는 데 많은 시간을 복용 참조하십시오.

+1

당신의 출력을 같이하기로 무엇을 – piRSquared

답변

1

당신은 이런 식으로 할 수 IIUC :

In [37]: df.loc[df.groupby('num')['srv_edt'].idxmin(), 'inpt_any'] = 'N' 

In [38]: df 
Out[38]: 
      num srv_edt inpt_flag inpt_any 
0 000423733A 2016-08-15   N  N 
1 001013135D 2016-07-11   N  N 
2 001013135D 2016-07-11   N  NaN 
3 001047851M 2016-04-29   N  N 
4 001067291M 2016-02-29   Y  N 
5 001067291M 2016-08-03   N  NaN 
6 001067291M 2016-08-03   N  NaN 
7 001067291M 2016-09-04   N  NaN 
8 001070817A 2016-05-25   N  N 
9 001070817A 2016-05-25   Y  NaN 
10 001072424A 2016-01-13   N  N 
11 001072424A 2016-02-17   Y  NaN 
12 001072424A 2016-03-21   N  NaN 
13 001072424A 2016-03-21   N  NaN 
14 001072424A 2016-05-10   N  NaN 
15 001072424A 2016-06-06   N  NaN 
관련 문제