繁体   English   中英

对 python pandas 中的多变量数据重新采样 timedelta

[英]Resampling timedelta for multivariate data in python pandas

Pandas 还是新手:

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

dataframe 看起来像这样:

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

对于我正在尝试创建 dataframe 的每个人,其中:

  • 索引是日期之间的时间增量(以天为单位)
  • 对于每个人的观测值都进行了上采样,因此每个人的观测值具有相同的长度,介于 -5 到 5 天之间。
  • 对于同一天收集的观察结果,取变量的平均值
  • 缺失值用 0 填充

所以它看起来像这样:

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)

然后,为您的“上采样”构建所有可能组合的列表。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM