目标和数据
我的目标是在给定的frame_id
处的vehicle_id
中查找preceding
的值,并在名为preceding_vel
的新列中提取v_vel
的相应值。我想使用siuba
python包来实现这个目的。以下是我的dataframe:
import pandas as pd
df_mini_dict = {'vehicle_id': {884: 2, 885: 2, 886: 2, 14148: 44, 14149: 44, 14150: 44},
'frame_id': {884: 338, 885: 339, 886: 340, 14148: 338, 14149: 339, 14150: 340},
'preceding': {884: 44, 885: 44, 886: 44, 14148: 3355, 14149: 3355, 14150: 3355},
'v_vel': {884: 6.299857770322456, 885: 6.427411525504063, 886: 6.590098168958994, 14148: 7.22883474245701, 14149: 6.973590500351793, 14150: 6.727721962795176}}
df_mini = pd.DataFrame.from_dict(df_mini_dict)
字符串
R工作方案
我可以通过使用以下代码来实现目标:
df_mini <- structure(list(vehicle_id = c(2L, 2L, 2L, 44L, 44L, 44L),
frame_id = c(338L, 339L, 340L, 338L, 339L, 340L),
preceding = c(44L, 44L, 44L, 3355L, 3355L, 3355L),
v_vel = c(6.29985777032246, 6.42741152550406,
6.59009816895899, 7.22883474245701,
6.97359050035179, 6.72772196279518),
preceding_vel = c(7.22883474245701, 6.97359050035179,
6.72772196279518, NA, NA, NA)),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -6L))
library(dplyr)
df_mini <- df_mini |>
dplyr::group_by(frame_id) |>
dplyr::mutate(preceding_vel = v_vel[match(preceding, vehicle_id)]) |>
dplyr::ungroup()
型
Python尝试
本质上,我试图在siuba
中做dplyr
正在做的事情,但似乎我需要使用index()
来做match
所做的事情。我尝试了以下失败:
def match(x, table):
indicez = []
for i in x:
indicez.append(table.index(i))
return indicez
from siuba import *
df_mini = (
df_mini
>> group_by(_.frame_id) # grouping by frame id
>> mutate(preceding_vel = _.v_vel[match(_.preceding, _.vehicle_id)])
)
TypeError: 'Symbolic' object is not iterable
型
请告诉我什么是定义match
函数的最佳方法,或者使用其他方法来满足目标。谢谢
2条答案
按热度按时间w8ntj3qf1#
按要求使用siuba:
我们将修改
match
函数,如下所示:字符串
oalqel3c2#
使用
merge
:字符串
R中的逻辑:
型