【发布时间】:2020-02-05 15:23:50
【问题描述】:
我正在使用一个数据集,其中包含有关多个用户的每月信息。并且每个用户都有不同的时间范围。每个用户也缺少数据。我想做的是根据每个用户的时间范围(从 min.time 到 max.time 以月为单位)填写每个用户的缺失数据。
由于数据模式属于时间序列,因此线性插值没有意义。我还根据“用户”和“日期”为数据框设置了多索引,但基于“时间”的插值不起作用(因为它尚未实现)
x = pd.DataFrame({'user': ['a','a','a','a','a','a','a','a','b','b','b','b','b','b','b','b','b','c','c','c','c','c','c','c','c'],'dt':['2015-01-01','2015-02-01','2015-03-01','2015-04-01','2015-05-01','2015-06-01','2015-07-01','2015-08-01','2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-01','2016-07-01','2016-08-01','2016-09-01','2017-01-01','2017-02-01','2017-03-01','2017-04-01','2017-05-01','2017-06-01','2017-07-01','2017-08-01'], 'val': [1,33,np.nan,1,np.nan,4,2,np.nan,66,2,5,1,np.nan,np.nan,7,5,np.nan,1,np.nan,7,4,np.nan,5,3,np.nan]})
user dt val
0 a 2015-01-01 1
1 a 2015-02-01 33
2 a 2015-03-01 NaN
3 a 2015-04-01 1
4 a 2015-05-01 NaN
5 a 2015-06-01 4
6 a 2015-07-01 2
7 a 2015-08-01 NaN
8 b 2016-01-01 66
9 b 2016-02-01 2
10 b 2016-03-01 5
11 b 2016-04-01 1
12 b 2016-05-01 NaN
13 b 2016-06-01 NaN
14 b 2016-07-01 7
15 b 2016-08-01 5
16 b 2016-09-01 NaN
17 c 2017-01-01 1
18 c 2017-02-01 NaN
19 c 2017-03-01 7
20 c 2017-04-01 4
21 c 2017-05-01 NaN
22 c 2017-06-01 5
23 c 2017-07-01 3
24 c 2017-08-01 NaN
在上面的数据集中,“val”列有几个缺失值,我正在研究如何为几个“用户”自动化执行此操作的过程。
此外,考虑到否,为每个用户构建时间序列模型是否有意义。每个用户的数据点数?
任何输入/解决方法将不胜感激。
谢谢, 卢克。
【问题讨论】:
-
你能展示你的预期输出吗?
-
x.groupby('user')['val'].apply(lambda x: x.ffill())? -
请检查我的答案
-
@ansev 我已经为“用户”和“日期”上的数据框设置了多索引,并且 interpolate(method = 'time') 失败。既然是时间序列数据,那么线性插值或均值插值是否有意义?
-
我认为线性插值更有意义。因为通过这种方式,值取决于最接近的值。如果用户急剧改变他的活动,也不会出现峰值。但这取决于您要提供的应用程序
标签: python-3.x pandas time-series interpolation imputation