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
我尝试为每个人创建一个数据框,其中:
- 索引是日期之间以天为单位的时间增量
- 对每个人的观察进行上采样,因此每个人的观察具有相同的长度,在 -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)
然后,为您的 'upsampling' 构建所有可能组合的列表。
person_date_diff_combos = [(person, date_diff) for person in persons for date_diff in date_diffs]
最后,为了根据需要取平均值,我们首先按 person
和 date_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)
对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
我尝试为每个人创建一个数据框,其中:
- 索引是日期之间以天为单位的时间增量
- 对每个人的观察进行上采样,因此每个人的观察具有相同的长度,在 -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)
然后,为您的 'upsampling' 构建所有可能组合的列表。
person_date_diff_combos = [(person, date_diff) for person in persons for date_diff in date_diffs]
最后,为了根据需要取平均值,我们首先按 person
和 date_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)