【问题标题】:Iterating a groupby datetime over several weeks在几周内迭代 groupby 日期时间
【发布时间】:2021-11-10 22:47:47
【问题描述】:

我正在尝试按我使用 to_datetime 和 timedelta 预定义的一周对我的数据进行分组。然而,在复制了我的脚本几次之后,我希望有一种方法可以在数周内迭代这个过程。这是可以做到的吗?

我正在使用的数据集列出了每个数据源及其对应 ID 的销售收入和每日支出。

以下是我目前掌握的知识,但由于是自学成才,我对循环的了解非常有限。

让我知道我的要求是否可行,或者我是否必须每周继续复制我的代码。

代码

import pandas as pd
from datetime import datetime, timedelta,date


startdate = '2021-09-26'
enddate =  pd.to_datetime(startdate) + timedelta(days=6)


last7 = (df.date >= startdate) & (df.date <= enddate)
df = df.loc[last7,['datasource','id','revenue','spend']]

df.groupby(by=['datasource_name','id'],as_index=False).sum()
df['start_date'] = startdate
df['end_date'] = enddate
df

【问题讨论】:

  • 你能分享示例数据集吗?

标签: python pandas pandas-groupby python-datetime


【解决方案1】:

如果我正确理解了您的问题,那么您基本上是在尝试将每日数据汇总为每周。你可以试试下面的代码

import datetime as dt
import pandas as pd

#Get weekend date for each date

df['week_end_date']=df['date'].apply(lambda x: pd.Period(x,freq='W').end_time.date().strftime('%Y-%m-%d'))
#Aggregate sales and revenue at weekly level

df_agg = df.groupby(['datasource_name','id','week_end_date']).agg({'revenue':'sum','spend':'sum'}).reset_index()

df_agg 将按相应日期的周末日期汇总您的所有销售和收入数字。

【讨论】:

  • 嗨,SAL,感谢您的帮助!我今天会试一试,然后告诉你结果如何。
  • 谢谢SAL,试了一下,脚本运行良好。您对在哪里了解有关 lambda 函数和字符串函数的更多信息有什么建议吗?
  • 如果您的代码规则增加,您可以使用函数而不是lamba。 lambda 是匿名函数,仅此而已。
  • 所以客户回来了,现在希望星期的开始是星期日,即星期日 = 0 而不是星期日 = 6。有没有办法改变 lambda 函数以反映星期日的开始日期?我告诉他们这可能不可行,因为 Datetime 是基于内部时间的
猜你喜欢
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2018-10-22
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多