我想查看TimeSeries
各个时间段内每个客户的数据Pandas
.
import pandas as pd import numpy as np import random clients = np.random.randint(1, 11, size=100) dates = pd.date_range('20130101',periods=365) OrderDates = random.sample(dates,100) Values = np.random.randint(10, 250, size=100) df = pd.DataFrame({ 'Client' : clients,'OrderDate' : OrderDates, 'Value' : Values}) df = df.sort(['OrderDate', 'Client'], ascending=['True', 'True']) df.head()
我想要完成的是获取"值"列的计数和总和,按"客户"分组各个时间段(每月,每季度,每年 - 我可能会为此数据构建3个不同的数据帧,然后制作数据帧"广泛").
对于季度,我希望这样的事情:
Client OrderDate NumberofEntries SumofValues 1 2013-03-31 7 28 1 2013-06-30 2 7 1 2013-09-30 6 20 1 2013-12-31 1 3 2 2013-03-31 1 4 2 2013-06-30 2 8 2 2013-09-30 3 17 2 2013-12-31 4 24
我可以通过获取每个条目(或月份或年份)的季度来附加该数据框,然后使用Pandas
groupby
函数,但这似乎是我应该使用时的额外工作TimeSeries
.
我已经阅读了文档并审阅了TimeSeries
Wes 的演示,但我没有看到groupby
为客户做一个方法,然后在TimeSeries
我尝试构建的时间段内执行(或者 - 我可以运行for loop
并构建这样的数据框架,但再次 - 似乎比应有的更多的工作.)
有没有办法将groupby
流程与TimeSeries
?
稍微替代方法是set_index
在进行groupby之前:
In [11]: df.set_index('OrderDate', inplace=True) In [12]: g = df.groupby('Client') In [13]: g['Value'].resample('Q', how=[np.sum, len]) Out[13]: sum len Client OrderDate 1 2013-03-31 239 1 2013-06-30 83 1 2013-09-30 249 2 2013-12-31 506 3 2 2013-03-31 581 4 2013-06-30 569 4 2013-09-30 316 4 2013-12-31 465 5 ...
注意:在执行此操作之前,您无需进行排序.