将彼此在某个时间范围内的任意日期对象分组在一起
我想将日历分割为从 2008-May-5
开始的两周间隔,或任何任意起点。
因此,我从几个日期对象开始:
import datetime as DT
raw = ("2010-08-01",
"2010-06-25",
"2010-07-01",
"2010-07-08")
transactions = [(DT.datetime.strptime(datestring, "%Y-%m-%d").date(),
"Some data here") for datestring in raw]
transactions.sort()
通过手动分析日期,我非常能够找出哪些日期属于同一两周间隔。我想要得到与此类似的分组:
# Fortnight interval 1
(datetime.date(2010, 6, 25), 'Some data here')
(datetime.date(2010, 7, 1), 'Some data here')
(datetime.date(2010, 7, 8), 'Some data here')
# Fortnight interval 2
(datetime.date(2010, 8, 1), 'Some data here')
I want to split the calendar into two-week intervals starting at 2008-May-5
, or any arbitrary starting point.
So I start with several date objects:
import datetime as DT
raw = ("2010-08-01",
"2010-06-25",
"2010-07-01",
"2010-07-08")
transactions = [(DT.datetime.strptime(datestring, "%Y-%m-%d").date(),
"Some data here") for datestring in raw]
transactions.sort()
By manually analyzing the dates, I am quite able to figure out which dates fall within the same fortnight interval. I want to get grouping that's similar to this one:
# Fortnight interval 1
(datetime.date(2010, 6, 25), 'Some data here')
(datetime.date(2010, 7, 1), 'Some data here')
(datetime.date(2010, 7, 8), 'Some data here')
# Fortnight interval 2
(datetime.date(2010, 8, 1), 'Some data here')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请
注意,2010-6-25 是自 2008-5-5 以来的第 55 个两周,而 2010-7-1 是第 56 个两周。如果您希望将它们组合在一起,只需更改
start_date
(更改为 2008-5-16 之类的值)。附言。上面用到的关键工具是
itertools.groupby
,详细解释这里。编辑:
lambda
只是一种使“匿名”的方法功能。 (它们是匿名的,因为它们没有像def
定义的函数那样被赋予名称)。在任何地方看到 lambda 时,都可以使用def
创建等效函数。例如,您可以这样做:yields
Note that 2010-6-25 is in the 55th fortnight from 2008-5-5, while 2010-7-1 is in the 56th. If you want them grouped together, simply change
start_date
(to something like 2008-5-16).PS. The key tool used above is
itertools.groupby
, which is explained in detail here.Edit: The
lambda
s are simply a way to make "anonymous" functions. (They are anonymous in the sense that they are not given names like functions defined bydef
). Anywhere you see a lambda, it is also possible to use adef
to create an equivalent function. For example, you could do this:使用带有 lambda 函数的 itertools groupby 将距起点的距离除以周期长度。
对于日期:
您还可以使用 strftime 中的周数,以及周数中的 lenperiod :
Use itertools groupby with lambda function to divide by the length of period the distance from starting point.
So with dates:
You can use also weeknumbers from strftime, and lenperiod in number of weeks:
使用 pandas
DataFrame
和 < a href="http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling" rel="nofollow">resample
也可以。给定OP的数据,但将“此处的一些数据”更改为“abcd”。现在尝试使用熊猫。首先创建一个 DataFrame,命名列并将索引设置为日期。
现在开始每 2 周使用一次系列偏移别名周日并连接结果。
需要钻取数据
现在根据周开始或
指数的
Using a pandas
DataFrame
withresample
works too. Given OP's data, but change "some data here" to 'abcd'.Now try using pandas. First create a
DataFrame
, naming the columns and setting the indices to the dates.Now use the Series Offset Aliases to every 2 weeks starting on Sundays and concatenate the results.
Now drill into the data as needed by weekstart
or index
or indices