Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Trajectory Direction Resulting_Direction
- STRAIGHT NORTH NORTH
- STRAIGHT NaN NORTH
- LEFT NaN WEST
- LEFT NaN WEST
- LEFT NaN WEST
- STRAIGHT NaN WEST
- STRAIGHT NaN WEST
- RIGHT NaN NORTH
- RIGHT NaN NORTH
- RIGHT NaN NORTH
- df.loc[:,'direction'] = np.NaN
- df.loc[df.index == 0, "direction"] = "WEST"
- # mask is for finding when a signal hasnt changed in three seconds, but now has
- mask = (df.trajectory != df.trajectory.shift(1)) & (df.trajectory == df.trajectory.shift(-1)) & (df.trajectory == df.trajectory.shift(-2))
- df.loc[(mask) & (df['trajectory'] == 'LEFT') & (df['direction'].dropna().shift() == "WEST"),'direction'] = 'SOUTH'
- df.loc[(mask) & (df['trajectory'] == 'LEFT') & (df['direction'].dropna().shift() == "SOUTH"),'direction'] = 'EAST'
- df.loc[(mask) & (df['trajectory'] == 'LEFT') & (df['direction'].dropna().shift() == "EAST"),'direction'] = 'NORTH'
- df.loc[(mask) & (df['trajectory'] == 'LEFT') & (df['direction'].dropna().shift() == "NORTH"),'direction'] = 'WEST'
- df.loc[(mask) & (df['trajectory'] == 'RIGHT') & (df['direction'].dropna().shift() == "WEST"),'direction'] = 'NORTH'
- df.loc[(mask) & (df['trajectory'] == 'RIGHT') & (df['direction'].dropna().shift() == "SOUTH"),'direction'] = 'WEST'
- df.loc[(mask) & (df['trajectory'] == 'RIGHT') & (df['direction'].dropna().shift() == "EAST"),'direction'] = 'SOUTH'
- df.loc[(mask) & (df['trajectory'] == 'RIGHT') & (df['direction'].dropna().shift() == "NORTH"),'direction'] = 'EAST'
- df.loc[:,'direction'] = df.direction.fillna(method="ffill")
- print(df[['trajectory','direction']])
- thresh = 3
- # mark the consecutive direction commands
- blocks = df.Trajectory.ne(df.Trajectory.shift()).cumsum()
- # group by blocks
- groups = df.groupby(blocks)
- # enumerate each block
- df['mask'] = groups.cumcount()
- # shift up to mark the beginning
- # mod thresh to divide each block into small block of thresh
- df['mask'] = groups['mask'].shift(1-thresh) % thresh
- # for conversion of direction to letters:
- changes = {'LEFT': -1,'RIGHT':1}
- directions = {0:'NORTH', 1:'EAST', 2:'SOUTH', 3:'WEST'}
- # update direction changes
- direction_changes = (df.Trajectory
- .where(df['mask'].eq(2)) # where the changes happends
- .map(changes) # replace the changes with number
- .fillna(0) # where no direction change is 0
- )
- # mod 4 for the 4 direction
- # and map
- df['Resulting_Direction'] = (direction_changes.cumsum() % 4).map(directions)
- Trajectory Direction Resulting_Direction mask
- 0 STRAIGHT NORTH NORTH NaN
- 1 STRAIGHT NaN NORTH NaN
- 2 LEFT NaN WEST 2.0
- 3 LEFT NaN WEST NaN
- 4 LEFT NaN WEST NaN
- 5 STRAIGHT NaN WEST NaN
- 6 STRAIGHT NaN WEST NaN
- 7 RIGHT NaN NORTH 2.0
- 8 RIGHT NaN NORTH NaN
- 9 RIGHT NaN NORTH NaN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement