首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas Groupby中具有freq='W-MON‘的线性回归

Pandas Groupby中具有freq='W-MON‘的线性回归
EN

Stack Overflow用户
提问于 2019-05-29 01:28:18
回答 1查看 189关注 0票数 0

我有超过一年的数据。我感兴趣的是按周对数据进行分组,并按周获得两个变量的斜率。下面是数据的样子:

代码语言:javascript
复制
Date               | Total_Sales| Products
2015-12-30 07:42:50| 2900       | 24
2015-12-30 09:10:10| 3400       | 20
2016-02-07 07:07:07| 5400       | 25
2016-02-07 07:08:08| 1000       | 64

因此,理想情况下,我希望对这些数据的每个星期的total_sales和产品执行线性回归,并记录斜率。当每周都在数据中表示时,这是有效的,但当数据中有几周跳过时,我就会遇到问题。我知道我可以通过将日期转换为周数字来做到这一点,但我觉得结果会出现偏差,因为有超过一年的数据。

以下是我到目前为止拥有的代码:

代码语言:javascript
复制
df['Date']=pd.to_datetime(vals['EventDate']) - pd.to_timedelta(7,unit='d')
df.groupby(pd.Grouper(key='Week', freq='W-MON')).apply(lambda v: linregress(v.Total_Sales, v.Products)[0]).reset_index()

但是,我得到以下错误:

代码语言:javascript
复制
ValueError: Inputs must not be empty.

我希望输出如下所示:

代码语言:javascript
复制
Date       | Slope
2015-12-28 | -0.008     
2016-02-01 | -0.008
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 03:29:35

我认为这是因为python不能正确地分组,也不能将日期时间识别为键,因为日期列也有不同的时间戳。

试试下面这个对我有效的code.It:

代码语言:javascript
复制
df['Date']=pd.to_datetime(df['Date'])  #### Converts Date column to Python Datetime

df['daysoffset'] = df['Date'].apply(lambda x: x.weekday())
#### Return the day of the week as an integer, where Monday is 0 and Sunday is 6.

df['week_start'] = df.apply(lambda x: x['Date'].date()-timedelta(days=x['daysoffset']), axis=1)  
#### x.['Date'].date() removes timestamp and considers only Date
#### the line assigns date corresponding to last Monday to column 'week_start'.


df.groupby('week_start').apply(lambda v: stats.linregress(v.Total_Sales,v.Products) 
[0]).reset_index()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56347360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档