2017-12-20 12 views
0

私は、起源と目的地のペアでグループ分けされたデータを持っています。グループの最初の行とグループの他の行を比較したいと思います。行が特定の条件を満たす場合は、それにフラグを立てます。以下は私のデータのスナップショットです:グループ化された行をループし、グループの第1行を比較する - 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 

行は> =の「VolPct」を持っている場合は1、それは第一行と比較されます。この例では、ルートBはルートAと比較されます。ルートBとルートAの「Per」の差が> = .2の場合、ルートBには「X」を新しい列。この例では、ルート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  

どのようにすればいいですか?私はPandasとPython 3.6を使用しています。ご協力いただきありがとうございます!

+0

予想される出力はどのように見えますか? –

+0

@cᴏʟᴅsexpected予想される出力を含めるように元の投稿を更新しました – 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

関連する問題