我有一个像这样的数据框:
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
我的问题仍然是它没有分发每个组的最后一个月。
答案 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