2017-12-20 3 views
0

원본 및 대상 쌍으로 그룹화 된 데이터가 있습니다. 그룹의 첫 번째 행과 그룹의 다른 행을 비교하고 싶습니다. 한 행이 특정 조건을 충족시키는 경우이를 플래그로 지정하고 싶습니다. . 행이> =의 "VolPct"일을 가지고그룹화 된 행을 반복하고 그룹의 첫 번째 행을 비교하십시오. - Python

Orig Dest Route Vol  Per VolPct 
ORD  ICN  A  2,251 0.64 0.78 
ORD  ICN  B  366  0.97 0.13 
ORD  ICN  C  142  0.14 0.05 
ORD  ICN  D  100  0.22 0.03 
ORD  ICN  E  25  1.00 0.01 

경우, 다음이 1 행과 비교됩니다 : 다음은 내 데이터의 스냅 샷입니다. 따라서이 예에서 경로 B는 경로 A와 비교됩니다. 경로 B의 경로와 경로 A의 차이가> = .2 인 경우 경로 B에 'X'를 삽입하여 플래그를 지정하고 싶습니다. 새 열. 이 예에서 Route B는 플래그가 지정됩니다. 예상 출력은 다음과 같습니다.

Orig Dest Route Vol  Per VolPct Flag 
ORD  ICN  A  2,251 0.64 0.78  
ORD  ICN  B  366  0.97 0.13  x 
ORD  ICN  C  142  0.14 0.05  
ORD  ICN  D  100  0.22 0.03  
ORD  ICN  E  25  1.00 0.01  

제안 사항이 문제를 해결하는 방법은 무엇입니까? 팬더와 파이썬 3.6을 사용하고 있습니다. 당신의 도움을 주셔서 감사합니다!

+0

예상되는 출력은 어떻게됩니까? –

+0

@ cᴏʟᴅs expected 원본 게시물을 업데이트하여 예상 출력을 포함 시켰습니다. – user3910919

+0

내 대답이 찾고있는 것인지 알려주세요. 그것은 꽤 빨라야합니다. –

답변

2

IIUC이 작업은 groupby + first으로 수행 할 수 있습니다. Flag의 값을 결정할 때는 np.where을 사용하십시오.

i = df.VolPct >= .1 
j = (df.Per - df.groupby('Orig').Per.transform('first') >= .2) 

df['Flag'] = np.where(i & j, 'X', '') 
df 

    Orig Dest Route Vol Per VolPct Flag 
0 ORD ICN  A 2,251 0.64 0.78  
1 ORD ICN  B 366 0.97 0.13 X 
2 ORD ICN  C 142 0.14 0.05  
3 ORD ICN  D 100 0.22 0.03  
4 ORD ICN  E  25 1.00 0.01 
+1

네, 그거야! 도와 줘서 고마워. – user3910919

관련 문제