按组将条件的观察值更改为下一个观察的值

时间:2019-11-29 19:22:08

标签: python pandas

我有一个按人次旅行的数据集(trips_data)。每个观察结果都是一次旅行,其中包含旅行的开始时间(strttime,旅行的结束时间(endtime)和旅行的人。对于某些人来说,旅行的结束时间晚于下一次旅行的开始时间。这是一个使用hhmm格式的时间的示例:

       TRIPID clepersonne  strttime  endtime
90  100010413    10001041      1600     1614
91  100010414    10001041      1615     1648
92  100010415    10001041      1645     1726
93  100010416    10001041      1930     1954
94  100010621    10001062       900      921
95  100010622    10001062      1000     1013

对于同一个人TRIPID100010414 strttime的终止晚于下一次旅行100010415的{​​{1}}。我想通过在下一次旅行的开始时间之前替换旅行10001041的{​​{1}}来纠正这种不一致。对于此示例,我想要的结果是:

endtime

我尝试这样做:

100010414

但是我得到这个错误:

       TRIPID clepersonne  strttime  endtime
90  100010413    10001041      1600     1614
91  100010414    10001041      1615     *1645*
92  100010415    10001041      1645     1726
93  100010416    10001041      1930     1954
94  100010621    10001062       900      921
95  100010622    10001062      1000     1013

你能帮我吗? 谢谢

1 个答案:

答案 0 :(得分:0)

使用:

next_start=df.groupby('clepersonne')['strttime'].shift(-1)
mask=df['endtime'].sub(next_start)>0
df['endtime']=df['endtime'].mask(mask,next_start)
print(df)

       TRIPID  clepersonne  strttime  endtime
90  100010413     10001041      1600     1614
91  100010414     10001041      1615     1645
92  100010415     10001041      1645     1726
93  100010416     10001041      1930     1954
94  100010621     10001062       900      921
95  100010622     10001062      1000     1013