Применить функцию к наборам столбцов в пандах, «зацикливаясь» по всему фрейму данных по столбцам

Вот тестовый пример, чтобы показать, чего я пытаюсь достичь. Вот'игрушечный фрейм данных:

df = pd.DataFrame(np.random.randn(10,7),index=range(1,11),columns=headers)

Который дает

    Time       A_x       A_y       A_z       B_x       B_y       B_z
1  -0.075509 -0.123527 -0.547239 -0.453707 -0.969796  0.248761  1.369613
2  -0.206369 -0.112098 -1.122609  0.218538 -0.878985  0.566872 -1.048862
3  -0.194552  0.818276 -1.563931  0.097377  1.641384 -0.766217 -1.482096
4   0.502731  0.766515 -0.650482 -0.087203 -0.089075  0.443969  0.354747
5   1.411380 -2.419204 -0.882383  0.005204 -0.204358 -0.999242 -0.395236
6   1.036695  1.115630  0.081825 -1.038442  0.515798 -0.060016  2.669702
7   0.392943  0.226386  0.039879  0.732611 -0.073447  1.164285  1.034357
8  -1.253264  0.389148  0.158289  0.440282 -1.195860  0.872064  0.906377
9  -0.133580 -0.308314 -0.839347 -0.517989  0.652120  0.477232 -0.391767
10  0.623841  0.473552  0.059428  0.726088 -0.593291 -3.186297 -0.846863

Что я хочу сделать, это просто рассчитать длину вектора для каждого заголовка (A и B) в этом случае для каждого индекса, и разделить наTime колонка. Следовательно, эта функция должна бытьnp.sqrt(A_x^2 + A_y^2 + A_z^2) и то же самое для B, конечно. То есть Я рассчитываю рассчитать скорость для каждой строки, но три столбца влияют на один результат скорости.

Я пытался использоватьdf.groupby а такжеdf.filter зацикливать столбцы, но я не могу заставить его работать, потому что я совсем не уверен, как эффективно применять одну и ту же функцию к фрагментам фрейма данных, все за один раз (так как, по-видимому, нужно избегать зацикливания). строки). Я пытался делать

df = df.apply(lambda x: np.sqrt(x.dot(x)), axis=1)

Это работает, конечно, но только в том случае, если во входном фрейме данных есть правильное количество столбцов (3), если оно длиннее, чем произведение точек на всю строку, а не на куски из трех столбцов, что я и хочу (потому что это повороты соответствуют координатам тега, которые являются трехмерными).

Вот что я в итоге пытаюсь получить с помощью приведенного выше примера (приведенные ниже массивы просто заполнены случайными числами, а не фактическими скоростями, которые я пытаюсь вычислить - просто чтобы показать, какую форму я пытаюсь достичь):

     Velocity_A  Velocity_B
1    -0.975633   -2.669544
2     0.766405   -0.264904
3     0.425481   -0.429894
4    -0.437316    0.954006
5     1.073352   -1.475964
6    -0.647534    0.937035
7     0.082517    0.438112
8    -0.387111   -1.417930
9    -0.111011    1.068530
10    0.451979   -0.053333

Мои фактические данные - 50 000 x 36 (поэтому есть 12 тегов с координатами x, y, z), и я хочу рассчитать скорость всего за один раз, чтобы избежать итерации (если это вообще возможно). Существует также столбец времени той же длины (50000x1).

Как ты это делаешь?

Спасибо, астрид

Ответы на вопрос(4)

Ваш ответ на вопрос