Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取各组未来6个月数据的列值之和_Python_Pandas_Dataframe_Datetime - Fatal编程技术网

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
    从数据帧列表创建单个数据帧
  • 对于给定数据,问题中显示的预期输出不正确。
    • 例如,对于
      id=1
      ,没有未来6个月的数据,因此,总和将为
      0
    • 对于
      id=2
      ,在接下来的6个月内有1个num,因此
      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']