在一个数据帧中对多个时间序列进行上采样

时间:2020-03-17 13:57:02

标签: python-3.x pandas datetime

在csv中获得像这样的数据

id,date,price
A,2020-05-04 15:00:00,1.2
B,2020-05-04 15:05:00,1.3
A,2020-05-04 16:07:00,1.4
B,2020-05-04 16:07:00,1.5

因此,在同一DataFrame中,A有一个时间序列,B有一个时间序列。 我创建了数据框并放置了像df.set_index(["id","date"])

这样的索引

现在我要上采样到分钟,以便结果对应于如下所示的csv:

id,date,price
A,2020-05-04 15:00:00,1.2
A,2020-05-04 15:01:00,1.2
...
A,2020-05-04 16:06:00,1.2
A,2020-05-04 16:07:00,1.4
B,2020-05-04 15:05:00,1.3
B,2020-05-04 15:06:00,1.3
...
B,2020-05-04 16:06:00,1.3
B,2020-05-04 16:07:00,1.5

,但是没有得到df.resample("60S", level ="date").pad()的提示,当我忽略级别并将级别获取为“从level =或on =选择上采样”时,得到的错误是我只能将其用于“ Datetimeindex但它是Multiindex” ,请使用.set_index将索引显式设置为类似datetime的“错误...

我觉得必须有一个简单的解决方案...?在一个数据集中拥有一个序列的多个实例是很普遍的吗? 可以肯定的是,我可以拆分数据框并在之后合并... 还有一些使用石斑鱼的帖子,但是对我来说听起来太复杂了,听起来好像级别参数一定是解决方案...

1 个答案:

答案 0 :(得分:0)

创建DatetimeIndex并使用与DataFrame.groupby链接的DataFrameGroupBy.resample

df = df.set_index("date").groupby('id').resample("60S").pad()
print (df)
                       id  price
id date                         
A  2020-05-04 15:00:00  A    1.2
   2020-05-04 15:01:00  A    1.2
   2020-05-04 15:02:00  A    1.2
   2020-05-04 15:03:00  A    1.2
   2020-05-04 15:04:00  A    1.2
                   ..    ...
B  2020-05-04 16:03:00  B    1.3
   2020-05-04 16:04:00  B    1.3
   2020-05-04 16:05:00  B    1.3
   2020-05-04 16:06:00  B    1.3
   2020-05-04 16:07:00  B    1.5

[131 rows x 2 columns]

仅处理price列,请使用:

df1 = df.set_index("date").groupby('id')['price'].resample("60S").pad().reset_index()
print (df1)
    id                date  price
0    A 2020-05-04 15:00:00    1.2
1    A 2020-05-04 15:01:00    1.2
2    A 2020-05-04 15:02:00    1.2
3    A 2020-05-04 15:03:00    1.2
4    A 2020-05-04 15:04:00    1.2
..  ..                 ...    ...
126  B 2020-05-04 16:03:00    1.3
127  B 2020-05-04 16:04:00    1.3
128  B 2020-05-04 16:05:00    1.3
129  B 2020-05-04 16:06:00    1.3
130  B 2020-05-04 16:07:00    1.5

[131 rows x 3 columns]
相关问题