#python-3.x #pandas
Вопрос:
У меня есть фрейм данных, в котором один столбец является текущим эталонным значением. Остальные столбцы представляют собой дельта — значения с течением времени эталонного значения. Есть ли быстрый (быстрее, чем цикл for, единственный способ, который я могу придумать сейчас) для вычисления общего числа в каждом из дельта-столбцов?
Ввод:
Ссылка | Дельта | Дельта2 |
---|---|---|
3 | -1 | 3 |
12 | 5 | -2 |
Желаемый Результат:
Ссылка | Дельта | Дельта2 |
---|---|---|
3 | 2 | 6 |
12 | 17 | 10 |
Ответ №1:
Вы можете временно создать Reference
индекс, добавить его значения в остальную часть фрейма данных и сбросить индекс обратно:
df.set_index("Reference").add(df.Reference.values, axis=0).reset_index()
( axis=0
позволяет добавлять по столбцам)
получить
Reference Delta Delta2
0 3 2 6
1 12 17 10
Ответ №2:
Второй метод заключается в создании 2D-массива, который вы можете просто добавить в соответствующие столбцы вашего фрейма данных.
Вот решение:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Reference': [3., 12.], 'Delta1': [-1., 5.], 'Delta2': [3., -2.]})
print(df)
reference_values = np.array(df['Reference'], dtype=float)
reference_values = reference_values.repeat(2).reshape(-1, 2)
df[['Delta1', 'Delta2']] = reference_values
print(df)