我在名为“ td”的数据框中具有以下数据:
bookingID Speed
--------- ------
000000001 10
000000002 20
000000001 30
000000003 40
000000001 50
基本上,我需要为每个bookingID计算加速度,因此输出必须如下所示:
bookingID Speed Acceleration
--------- ------ ------------
000000001 10 0
000000002 20 0
000000001 30 20
000000003 40 0
000000001 50 20
由于某些原因,此代码不起作用:
def get_accel(curr_speed,last_speed):
return last_speed - curr_speed
td['Acceleration'] = td.groupby(['bookingID']).apply(lambda x: get_accel(td.Speed,td.Speed.shift()))
它说
试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] =值
我在做什么错?谢谢
答案 0 :(得分:1)
首先根据您的输出,这是一个diff
问题
td['Acceleration'] = td.groupby('bookingID').Speed.diff().fillna(0)
如果您应用的功能是diff,则可以通过
对其进行修复td['Acceleration']= td.groupby(['bookingID']).apply(lambda x: get_accel(x.Speed,x.Speed.shift())).reset_index(level=0,drop=True)