Векторизованный способ объединения двух информационных кадров в результат ay = mx + b - PullRequest
1 голос
/ 23 декабря 2019

У меня есть два кадра данных панд. Одним из них является временной ряд значений m и b из типичной функции y=mx+b. Другим кадром данных (можно считать серию) является значение x для нескольких различных категорий. (да, x остается фиксированным, и линейные параметры в этой ситуации изменяются)

Я хочу создать новый фрейм данных, индекс которого равен formula_df.index, столбцы - staff.columns, и значение = mx+b, полученное умножением значений staff_df на formula_df[m] и добавлением formula[b].

В качестве конкретного примера final_df.loc[pd.IndexSlice['20191204', 'matt']] будет выглядеть так: (22 * 0,90 + 10)

staff = {"mike": 18,  "matt": 22,  "dave": 25, "kanad": 15, 'elder':85}
staff_df = pd.DataFrame(data=staff, index = ['measurement'])
staff_df.index.name="evaluation"


the_data = {'m': [.5, .1, .3, .9, 1.2], 'b':[12, 14, 8, 10, 20]}
formula_df = pd.DataFrame(index=pd.date_range(start="20191201", periods=5, freq="d"),
                         data=the_data)
formula_df.index.name="Date"

Даже попытка сделать mx часть уравнения не удалась. Я пытался сделать что-то вроде formula_df['m']*staff_df, но это дает бессмысленный результат. Полагаю, если бы я знал numpy лучше, было бы понятно, что делать, увы, я не знаю. Я подозреваю, что это что-то касается broadcasting, но я не уверен.

1 Ответ

1 голос
/ 23 декабря 2019

Создайте final_df DataFrame по конструктору по столбцам и именам индексов, а данные преобразуют первый столбец в массив numpy, затем умножьте на DataFrame.mul и добавьте столбец на DataFrame.add:

final_df = pd.DataFrame(data=[staff_df.iloc[0].to_numpy()], 
                        index=formula_df.index, 
                        columns=staff_df.columns)
final_df = final_df.mul(formula_df['m'], axis=0).add(formula_df['b'], axis=0)

print (final_df)
            mike  matt  dave  kanad  elder
Date                                      
2019-12-01  21.0  23.0  24.5   19.5   54.5
2019-12-02  15.8  16.2  16.5   15.5   22.5
2019-12-03  13.4  14.6  15.5   12.5   33.5
2019-12-04  26.2  29.8  32.5   23.5   86.5 <- 22 * 0.90 + 10 = 29.8
2019-12-05  41.6  46.4  50.0   38.0  122.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...