Добавить новый столбец в Pandas Dataframe из вывода функций - PullRequest
0 голосов
/ 01 июня 2018

Я написал функцию для оценки параметров простой линейной регрессии.Функция выдает несколько выходов.Функциональные входы - это два списка .Кроме того, у меня есть исходный DataFrame df, откуда я получил два списка.

Я хочу добавить некоторые выходные данные из функции в исходный DataFrame в виде новых столбцов или иметь новые списки вне функции.

например:

def predict(X,Y):
     beta1 = sum([(X[i] - mean_X)*(Y[i] - mean_Y) for i in range(len(X))]) / sum([(X[i] - mean_X)**2 for i in range(len(X))])
     beta0 = mean_Y - beta1 * mean_X

     y_hat = [beta0 + beta1*X[i] for i in range(len(X))]

     return df.assign(prediction = y_hat)

Здесь mean_X и mean_Y - среднее значение выборки для списка X и списка Y соответственно.

Также я попытался numpy.insert () добавить y_hat не в исходный DataFrame, а в X, который я преобразовал в массив numpy.

У меня нет успеха в достижении желаемого результата, поэтому кто-то может мне помочь?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Насколько я понял ваш вопрос, вы хотите использовать свою функцию в существующей / новой колонке.Если это так, вот один из способов сделать это.Если нет, то дайте мне знать, я удалю ответ.Спасибо

import pandas as pd

def Somefunction(x, y):
  a = 2 *x
  b = 3 * y
  return pd.Series([a, b], index= ['YourColumn1', 'YourColumn2'])





df = pd.read_csv('YourFile')

df = df.join(df.apply(lambda x: 
  Somefunction(x['ColumnYouWantToApplyFunctionReturnValue a'], 
  x['ColumnYouWantToApplyFunctionReturnValue B']), axis=1))
0 голосов
/ 01 июня 2018

Ваш код не очень понятен.Что такое переменные mean_X и mean_Y?

РЕДАКТИРОВАТЬ: Добавлено объявление переменной.

В любом случае, вот простое предложение:

import numpy as np
def predict(X, Y, df):
    mean_X = np.mean(X)
    mean_Y = np.mean(Y)
    beta1 = sum([(X[i] - mean_X)*(Y[i] - mean_Y) for i in range(len(X))]) / sum([(X[i] - mean_X)**2 for i in range(len(X))])
    beta0 = mean_Y - beta1 * mean_X
    y_hat = [beta0 + beta1*X[i] for i in range(len(X))]
    df['prediction'] = y_hat
    return df

Более разумный способ для продолжения будет использовать apply () функция, вызываемая в вашем DataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...