tst*_*eby 5 python time-series dataframe pandas pandas-groupby
我有一个像这样的数据集:
id date value
1 16-12-1 9
1 16-12-1 8
1 17-1-1 18
2 17-3-4 19
2 17-3-4 20
1 17-4-3 21
2 17-7-13 12
3 17-8-9 12
2 17-9-12 11
1 17-11-12 19
3 17-11-12 21
Run Code Online (Sandbox Code Playgroud)
上面唯一的结构是行按日期排序。
我想要做的是,按 id 分组并重新采样日期,以便每个 id 具有相同的数值。每月、每周或每天重新采样就足够了。
我的最终数据集(每年重新采样)如下所示:
id interval value
1 16-12-1 - 17-12-1 75
2 16-12-1 - 17-12-1 62
3 16-12-1 - 17-12-1 33
Run Code Online (Sandbox Code Playgroud)
如何实施?这行得通吗(因为我在日期字段中没有秒,即它不是标准的 pandas 日期时间对象)?
dataframe.groupby(id).resample('year')
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来做到这一点?
按 ID 划分的每周总和:
df['date'] = pd.to_datetime(df['date'], format='%y-%m-%d')
df = df.set_index('date')
df.groupby('id').resample('W')['value'].agg('sum').loc[lambda x: x>0]
Run Code Online (Sandbox Code Playgroud)
输出:
id date
1 2016-12-04 17
2017-01-01 18
2017-04-09 21
2017-11-12 19
2 2017-03-05 39
2017-07-16 12
2017-09-17 11
3 2017-08-13 12
2017-11-12 21
Name: value, dtype: int64
Run Code Online (Sandbox Code Playgroud)