【发布时间】:2017-05-21 14:02:07
【问题描述】:
我正在尝试通过 pandas python 数据框对组使用线性回归:
这是数据框df:
group date value
A 01-02-2016 16
A 01-03-2016 15
A 01-04-2016 14
A 01-05-2016 17
A 01-06-2016 19
A 01-07-2016 20
B 01-02-2016 16
B 01-03-2016 13
B 01-04-2016 13
C 01-02-2016 16
C 01-03-2016 16
#import standard packages
import pandas as pd
import numpy as np
#import ML packages
from sklearn.linear_model import LinearRegression
#First, let's group the data by group
df_group = df.groupby('group')
#Then, we need to change the date to integer
df['date'] = pd.to_datetime(df['date'])
df['date_delta'] = (df['date'] - df['date'].min()) / np.timedelta64(1,'D')
现在我想预测 2016 年 1 月 10 日每个组的值。
我想得到一个像这样的新数据框:
group 01-10-2016
A predicted value
B predicted value
C predicted value
这个How to apply OLS from statsmodels to groupby 不起作用
for group in df_group.groups.keys():
df= df_group.get_group(group)
X = df['date_delta']
y = df['value']
model = LinearRegression(y, X)
results = model.fit(X, y)
print results.summary()
我收到以下错误
ValueError: Found arrays with inconsistent numbers of samples: [ 1 52]
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.DeprecationWarning)
更新:
我改成
for group in df_group.groups.keys():
df= df_group.get_group(group)
X = df[['date_delta']]
y = df.value
model = LinearRegression(y, X)
results = model.fit(X, y)
print results.summary()
现在我得到这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
【问题讨论】:
-
@ayhan - 完成!谢谢
-
你在循环中破坏了你的
df。 -
我认为问题在于您的构造函数调用。您将 y 传递给构造函数的 fit_intercept 参数,该参数接受一个布尔值,并且您将另一个数组 X 传递给 copy_X 布尔值。
-
您希望您的
date_delta相对于整个df的最小日期计算? -
我想在未来(01-10-2016)为每个组计算一个 date_delta 的值
标签: python pandas dataframe group-by linear-regression