日期时间上采样

时间:2017-09-08 16:39:40

标签: python pandas datetime resampling

我有一个像这样的数据框:

rows = [['bob', '01/2017', 12],
        ['bob', '02/2017', 14],
        ['bob', '03/2017', 16],
        ['julia', '01/2017', 18],
        ['julia', '02/2017', 16],
        ['julia', '03/2017', 24]]

df = pd.DataFrame(rows, columns = ['name','date','val'])

假设每个月有四周(我将使用查找来匹配月份到num周,但为了简单起见假设为4),我想为每个人的每个星期创建一行,其值为月值除以4(或n_weeks)。

我尝试使用.resample().asfreq(),但他们告诉我我需要一个独特的索引。

我怎么能在熊猫中做到这一点?

编辑

好的,所以我得到了这个:

weekly = df.groupby('name').apply(lambda g: g.set_index('date').resample('w').pad().reset_index()).reset_index(drop=True)

weekly.val/4

    date    name    val
0   2017-01-01  bob 3
1   2017-01-08  bob 3
2   2017-01-15  bob 3
3   2017-01-22  bob 3
4   2017-01-29  bob 3
5   2017-02-05  bob 3.5
6   2017-02-12  bob 3.5
7   2017-02-19  bob 3.5
8   2017-02-26  bob 3.5
9   2017-03-05  bob 4
10  2017-01-01  julia   4.5
11  2017-01-08  julia   4.5
12  2017-01-15  julia   4.5
13  2017-01-22  julia   4.5
14  2017-01-29  julia   4.5
15  2017-02-05  julia   4
16  2017-02-12  julia   4
17   2017-02-19 julia   4
18  2017-02-26  julia   4
19  2017-03-05  julia   6

我的问题仍然是它没有分发每个组的最后一个月。

1 个答案:

答案 0 :(得分:0)

所以有人回答了这个问题,但在我复制它之前将其删除了,但我想我想出了它们的用途:

所以从这个数据框(在问题中创建)

    name    date    val
0   bob 01/2017 12
1   bob 02/2017 14
2   bob 03/2017 16
3   julia   01/2017 18
4   julia   02/2017 16
5   julia   03/2017 24

我能做到:

from pandas.tseries.offsets import *
df['date']=pd.to_datetime(df.date)

min_date = df.date.min()+MonthBegin(0)
max_date = df.date.max()+MonthEnd(0)
dr = pd.date_range(min_date, max_date,freq='w')

weekly = df.groupby('name').apply(lambda g: g.set_index('date')
         .reindex(dr,method='pad').reset_index()).reset_index(drop=True)

并获取

    index      name val
0   2017-01-01  bob 12
1   2017-01-08  bob 12
2   2017-01-15  bob 12
3   2017-01-22  bob 12
4   2017-01-29  bob 12
5   2017-02-05  bob 14
6   2017-02-12  bob 14
7   2017-02-19  bob 14
8   2017-02-26  bob 14
9   2017-03-05  bob 16
10  2017-03-12  bob 16
11  2017-03-19  bob 16
12  2017-03-26  bob 16
13  2017-01-01  julia   18
14  2017-01-08  julia   18
15  2017-01-15  julia   18
16  2017-01-22  julia   18
17  2017-01-29  julia   18
18  2017-02-05  julia   16
19  2017-02-12  julia   16
20  2017-02-19  julia   16
21  2017-02-26  julia   16
22  2017-03-05  julia   24
23  2017-03-12  julia   24
24  2017-03-19  julia   24
25  2017-03-26  julia   24