Выберите значение из фрейма данных на основе другого фрейма данных - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь рассчитать положение объекта на основе отметки времени. Для этого у меня есть два кадра данных в pandas. Один для данных измерений и один для позиции. Все движение - прямое ускорение.

В кадре данных 1 содержатся данные измерений:

        ms        force   ...    ...    ...
1      5           20
2      10          20
3      15          25
4      20          30
5      25          20
..... (~ 6000 lines)

В кадре данных 2 содержатся «данные позиционирования»

        ms        speed (m/s)
1      0           0.66
2      4500        0.66
3      8000        1.3
4      16000       3.0
5      20000       3.0
.....(~300 lines)

Теперь я хочу вычислить положение первого информационного кадра с данными из вторичного информационного кадра. В Excel я решил проблему с помощью массива формул, но теперь мне нужно использовать Python / Pandas, и я не могу найти способ выбрать правильную строку из информационного кадра 2 .

Моя идея состоит в том, чтобы сделать что-то вроде этого: if

В конце я хочу отобразить график "force <-> way", а не "force <-> time"

Спасибо в andvance

=================================== ====================================== Обновление: Тем временем я почти смог решить мою проблему. Теперь мои данные выглядят так:

Dataframe 2 (данные о скорости):

        pos       v         a         t      t-end    t-start
0    -3.000    0.666667  0.000000  4.500000   4.500000   0.000000
1     0.000    0.666667  0.187037  0.071287   4.571287   4.500000
2     0.048    0.680000  0.650794  0.010244   4.581531   4.571287
3     0.055    0.686667  0.205432  0.064904   4.646435   4.581531
...
15    0.055    0.686667  0.5       0.064904     23.0     20.0
...
28    0.055    0.686667  0.6       0.064904     35.0     34.0
...
30    0.055    0.686667  0.9       0.064904     44.0     39.0

И Dataframe 1 (измерение по времени):

        Fx     Fy     Fz      abs_t               expected output ('a' from DF1)
0      -13.9  170.3   45.0   0.005                            0.000000  
1      -14.1  151.6   38.2   0.010                            0.000000  
...
200    -14.1  131.4   30.4   20.015                           0.5
...
300    -14.3  111.9   21.1   34.01                            0.6
...
400    -14.5   95.6   13.2   40.025

Итак, я хочу чтобы проверить время (abs_t) из DF1 и найти corract 'a' в DF2. Что-то вроде этого (псевдокод):

if (DF1['t_abs'] between (DF2['t-start'], DF2['t-end']):
    DF1['a'] = DF2['a']

Я мог бы сделать два цикла, но это выглядит как неправильный путь и очень очень медленно.

Я надеюсь, вы понимаете мою проблему; предоставить работающий образец очень сложно. В Excel я сделал так: excel solution array formula

1 Ответ

0 голосов
/ 19 февраля 2020

Я нашел очень медленное решение, но по крайней мере оно работает: (

df1['a'] = 0
for index, row in df2.iterrows():
    start = row['t-start']
    end = row ['t-end']
    a = row ['a']

    df1.loc[(df1['tabs']>start)&(df1['tabs']<end), 'a'] = a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...