如何按 id 对列重新采样

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)

有没有更快的方法来做到这一点?

Sco*_*ton 3

按 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)