使用np.gradient()遍历数据框列以计算速度

时间:2020-07-10 11:31:58

标签: python pandas loops

我有两个数据帧,LP_posvel,其中LP_pos包含用于计算速度的位置数据,这些数据将进入第二个数据帧。

我想使用np.gradient()来计算df每行的速度,方法是遍历df1的列并在df2中创建新的列,并使用以梯度计算的信息。这就是我到目前为止所拥有的

# create a new column for velocity
def vel(df1, df2):
    for col in df1:
        df2[col + '_vel'] = np.gradient(df1[col], df1['Time'])
    return df2

vel(LP_pos, vel)

但是我收到此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-c69328603d12> in <module>
      5     return df2
      6 
----> 7 vel(LP_pos, vel)

<ipython-input-14-c69328603d12> in vel(df1, df2)
      2 def vel(df1, df2):
      3     for col in df1:
----> 4         df2[col + '_vel'] = np.gradient(df1[col], df1['Time'])
      5     return df2
      6 

TypeError: 'function' object does not support item assignment

有人可以帮我吗?

样本数据:

    Time    X           Y           Z
0   0.00    0.245740    0.204112    0.168514    
1   0.01    0.245737    0.204115    0.168523    
2   0.02    0.245732    0.204117    0.168532    
3   0.03    0.245723    0.204118    0.168541    

所需的输出:

    Time    X_vel       Y_vel       Z_vel
0   0.00    grad(X1)    grad(Y1)    grad(Z1)    
1   0.01    grad(X2)    grad(Y2)    ... 
2   0.02    grad(X3)    ...         ...
3   0.03    grad(X4)    ...         ...

1 个答案:

答案 0 :(得分:1)

您的第二个数据框与您的函数(vel)具有相同的名称,因此隐藏了此数据框。只需为第二个数据框或您的函数使用另一个名称,例如

def calculate_vel(df1, df2):
    for col in df1:
        df2[col + '_vel'] = np.gradient(df1[col], df1['Time'])
    return df2

calculate_vel(LP_pos, vel)