循环分组行并比较组中的第一行 - Python

时间:2017-12-20 19:37:20

标签: python pandas

我有按原点和目的地对分组的数据。我想将组中的第一行与组中的其他行进行比较。如果一行符合某些条件,那么我想标记它。以下是我的数据的快照:

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,然后将其与第1行进行比较。所以在这个例子中,路由B将与路由A进行比较。如果" Per"之间的差异。路线B和路线A的路线是> = .2,然后我想通过放置" X"来标记路线B.在一个新专栏中。在此示例中,路由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。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

IIUC,您可以使用groupby + first执行此操作。使用np.where确定Flag的值。

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