【发布时间】:2020-08-19 01:31:45
【问题描述】:
我有一个数据框df,看起来像这样:
id date num
0 1 2005-01-01 7
1 1 2006-01-05 2
2 2 2005-01-01 1
3 2 2005-04-01 1
4 3 2009-01-01 2
对于每个 id 组,我想获得未来 6 个月数据的 num 总和。比如id=1,未来6个月没有数据,所以sum为0。id=2,未来6个月有1个num,所以total=1。
我可以为每个子组执行此操作,但不能为完整的数据集执行此操作。对于一个 sub-group 数据框,这是我尝试过的:
df1 = df[df['id']==1]
def get_future_sum(val):
end_date = val.date + relativedelta(months=+6)
date_range = df1[(df1['date'] > val.date) &
(df1['date'] <= end_date)]
return date_range['num'].sum()
df1['total'] = df1.apply(get_future_sum, axis=1)
最终的数据框应如下所示:
id date total
0 1 2005-01-01 0
1 1 2006-01-05 0
2 2 2005-01-01 1
3 2 2005-04-01 0
4 3 2009-01-01 0
我尝试使用 groupby 对多个组进行迭代并应用,但它不起作用,因为每个组的 df1 都发生了变化,我不知道如何适应它。
是否有一种更短的方法来遍历所有组而不为每个组使用 for 循环?
【问题讨论】:
标签: python pandas dataframe datetime