Итерации по столбцам фрейма данных для вычисления скорости с помощью np.gradient () - PullRequest
0 голосов
/ 10 июля 2020

У меня есть два фрейма данных, LP_pos и vel, где LP_pos содержит данные положения, которые будут использоваться для расчета скорости, которая будет go во втором фрейме данных.

Я хочу вычислить скорость каждой строки df с использованием np.gradient(), путем итерации по столбцам 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 Ответ

1 голос
/ 10 июля 2020

Ваш второй фрейм данных имеет то же имя, что и ваша функция (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...