我有几天1分钟数据的时间序列,并且希望在一天中的所有日期对其进行平均.
这很慢:
from datetime import datetime
from pandas import date_range, Series
time_ind = date_range(datetime(2013, 1, 1), datetime(2013, 1, 10), freq='1min')
all_data = Series(randn(len(time_ind)), time_ind)
time_mean = all_data.groupby(lambda x: x.time()).mean()
Run Code Online (Sandbox Code Playgroud)
运行差不多一分钟!
虽然像:
time_mean = all_data.groupby(lambda x: x.minute).mean()
Run Code Online (Sandbox Code Playgroud)
只需要几分之一秒.
是否有更快的方式按时间分组?
知道为什么这么慢吗?
想象一下,我有一个像下面这样的数据框,我将每天看到的每只动物记录为一个新行。
Day Animal
1 Lion
1 Elephant
1 Giraffe
1 Elephant
2 Elephant
2 Rhino
2 Rhino
2 Lion
2 Elephant
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列,其中包含1每天看到的第一只动物(以及当天每次看到同一只动物时),并包含2下一只动物,依此类推。上面示例的结果应如下所示:
Day Animal Number
1 Lion 1
1 Elephant 2
1 Giraffe 3
1 Elephant 2
2 Elephant 1
2 Rhino 2
2 Rhino 2
2 Lion 3
2 Elephant 1
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个简化的示例。我知道在上面的这个例子中,人们可能更喜欢使用组合groupby和count计算每天的出现次数(例如总结每天出现的次数 pandas)。但是,在我的现实世界中情况并非如此。我需要给它们编号,以便以后可以将这些数字用于其他用途。