python pandas 中多元数据的重采样时间增量

Resampling timedelta for multivariate data in python pandas

对Pandas还是陌生的:

我有一些数据 (df),它是不同人及其变量的时间序列数据。

数据框如下所示:

date1                 date2                 person  var1   var2
2016-01-04 12:56:00   2016-01-05 00:00:00   1       100    200   
2016-01-04 15:11:00   2016-01-05 00:00:00   1       110    120
2016-01-06 18:05:00   2016-01-06 00:00:00   2       220    300
2016-01-07 18:59:00   2016-01-07 00:00:00   2       200    100
2016-01-02 19:30:00   2016-01-02 00:00:00   3       400    500

我尝试为每个人创建一个数据框,其中:

看起来像这样:

days   person  var1   var2
-5     1        0      0   
-4     1        0      0
-3     1        0      0
-2     1        0      0
-1     1        X      X
0      1        Y      Y
...
-5     2        0      0
-4     2        0      0

etc

我试过使用 timedelta 索引,使用 groupby('person') 和重采样,但我不知道如何为每个人获取指定的日期范围(-5 到 5)或如何处理多个观察结果。

非常感谢指点,谢谢。

首先,准备完整的人员名单和意向日差

persons = df['person'].unique()
date_diffs = np.arange(-5,6)

然后,为您的 'upsampling' 构建所有可能组合的列表。

person_date_diff_combos = [(person, date_diff) for person in persons for date_diff in date_diffs]

最后,为了根据需要取平均值,我们首先按 persondate_diff 对数据进行分组,取两个变量的平均值,然后 reindex 创建缺失的行, 最后用零填充缺失的行。

df = df.groupby([
    'person',
    (df['date2'] - df['date1']).dt.days.rename('date_diff'),
])\
    [['var1', 'var2']].mean()\
    .reindex(person_date_diff_combos, axis=0)\
    .fillna(0)