Python 获取各组未来6个月数据的列值之和
我有一个数据帧Python 获取各组未来6个月数据的列值之和,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有一个数据帧df,看起来像这样: id date num 0 1 2005-01-01 7 1 1 2006-01-05 2 2 2 2005-0
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 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
对于每个id
组,我想得到未来6个月数据的num
之和。例如,对于id=1
,没有未来6个月的数据,因此总和将为0。对于id=2
,在接下来的6个月内有1个num,因此total=1
我可以为每个子组这样做,但不能为完整的数据集这样做。对于一个子组dataframe,我尝试了以下方法:
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)
我尝试使用groupby和apply在多个组中迭代它,但它不起作用,因为每个组的df1
都发生了变化,我不确定如何适应这种变化
是否有一种较短的方法可以在所有组上迭代它,而不为每个组使用for循环?- 原始问题:是否有一种较短的方法在所有组中迭代?
- 使用
按groupby
id
- 使用
- 我尝试使用
和groupby
在多个组中迭代它,但它不起作用,因为每个组的apply
都发生了变化,我不确定如何适应。df1
- 当通过更新发送给函数的分组数据帧正确实现时,它可以工作
- 是否有一种较短的方法可以在所有组上迭代它,而不对每个组使用for循环?
- 可能不是,因为函数需要每个组的数据帧来确定日期范围,并且函数需要迭代每一行
- 遍历groupby对象
- 函数
对分组数据帧的每一行进行计算,并返回一个和def get_future_sum
- 将每组的结果保存在
列表中
- 使用
从数据帧列表创建单个数据帧pd.concat
- 对于给定数据,问题中显示的预期输出不正确。
- 例如,对于
,没有未来6个月的数据,因此,总和将为id=1
0
- 对于
,在接下来的6个月内有1个num,因此id=2
total=1
- 例如,对于
- 也看到
将熊猫作为pd导入
从dateutil.relativedelta导入relativedelta
#测试数据和数据帧
数据={'id':[1,1,2,2,3],
“日期”:[pd时间戳('2005-01-01 00:00:00')、pd时间戳('2006-01-05 00:00:00')、pd时间戳('2005-01-01 00:00:00')、pd时间戳('2005-04-01 00:00:00')、pd时间戳('2009-01-01 00:00:00'),
'num':[7,2,1,1,2]}
df=pd.DataFrame(数据)
#更新功能
def get_future_sum(val:pd.Series,d:pd.DataFrame)->np.int64:
结束日期=val.date+relativedelta(月数=+6)
日期范围=d[(d['date']>val.date)和(d['date']