首页 > 解决方案 > pandas - 根据时间序列中的变化指示创建重复数据

问题描述

我有一个指示位置变化的时间序列,如下所示:

08-09-2018 17:00:00, user_1, home
08-09-2018 18:30:00, user_2, home
08-09-2018 18:40:00, user_1, recreation center

我需要创建“桶”(在本例中,可能每 15m 一次),并且我需要用最后一个桶中的内容填充每个桶,如下所示:

08-09-2018 17:00:00, user_1, home
08-09-2018 17:15:00, user_1, home
08-09-2018 17:30:00, user_1, home
08-09-2018 17:45:00, user_1, home
08-09-2018 18:00:00, user_1, home
08-09-2018 18:15:00, user_1, home
08-09-2018 18:30:00, user_1, home
08-09-2018 18:30:00, user_2, home
08-09-2018 18:45:00, user_1, recreation center
08-09-2018 18:45:00, user_2, home
08-09-2018 19:00:00, user_1, recreation center
08-09-2018 19:00:00, user_2, home

从那里我会得到位置名称的虚拟数据..但那部分我知道该怎么做:)如果有帮助,请随意将其分组如下:

 pd.crosstab([locationDf.date, locationDf.user], locationDf.location)

我该怎么做第一部分?

我可以这样做:

对于用户,locDf.groupby('user') 中的 user_loc_dc: user_loc_dc.resample('15T').agg('max').ffill() # 只需附加这些

标签: pythonpandasdatetime

解决方案


使用pd.resample()ffill()

dates = [pd.Timestamp('08-09-2018 17:00:00'), pd.Timestamp('08-09-2018 18:30:00'), pd.Timestamp('08-09-2018 18:40:00'), pd.Timestamp('08-09-2018 19:00:00')]

data = [['user_1', 'home'], ['user_2', 'home'], ['user_1', 'recreation center'], ['user_2', 'home']]

resampled = pd.Series(data, dates).resample('15T').ffill()

产量:

2018-08-09 17:00:00                 [user_1, home]
2018-08-09 17:15:00                 [user_1, home]
2018-08-09 17:30:00                 [user_1, home]
2018-08-09 17:45:00                 [user_1, home]
2018-08-09 18:00:00                 [user_1, home]
2018-08-09 18:15:00                 [user_1, home]
2018-08-09 18:30:00                 [user_2, home]
2018-08-09 18:45:00    [user_1, recreation center]
2018-08-09 19:00:00                 [user_2, home]
Freq: 15T, dtype: object

推荐阅读