pandas数据框架比较前一行和条件



Python和Pandas新手。我有以下数据框,我希望能够比较行,其中路由和vals在前一行/行中是相同的,并相应地更新from和to。

DF:
route  frm    to  val
0      1    0   100    3
1      1  100   300    2
2      1  300   500    3
3      1  500  9999    3
4      2    0   100    3
5      2  100   300    3
6      2  300   500    3
7      2  500  9999    3
Desired Output:
route  frm    to  val
0      1    0   100    3
1      1  100   300    2
3      1  300  9999    3
7      2  0    9999    3

我已经尝试了以下使用shift()的方法,它让我得到了一些方法,但我不确定如何实现所需输出的最佳方法。

如有任何建议,不胜感激。

df['f'] = np.where((df.route.eq(df.route.shift())) & (df.val == df.val.shift()),df.frm.shift(),df.frm)
df['t'] = np.where((df.route.eq(df.route.shift())) & (df.val == df.val.shift()),df.to.shift(),df.to)
Output:
route  frm    to  val    f    t
0      1    0   100    3    0  100
1      1  100   300    2  100  300
2      1  300   500    3  300  500
3      1  500  9999    3  300  500
4      2    0   100    3    0  100
5      2  100   300    3    0  100
6      2  300   500    3  100  300
7      2  500  9999    3  300  500

使用自定义groupby.agg:

(df.groupby(['route', df['val'].ne(df['val'].shift()).cumsum()],
as_index=False)
.agg({'route': 'first',
'frm': 'first',
'to': 'last',
'val': 'last'})
)

输出:


route  frm    to  val
0      1    0   100    3
1      1  100   300    2
2      1  300  9999    3
3      2    0  9999    3

最新更新