首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫团购日期,然后是集团的产品?

熊猫团购日期,然后是集团的产品?
EN

Stack Overflow用户
提问于 2018-11-04 05:29:41
回答 1查看 489关注 0票数 2

我有一个日期时间的值列表:

代码语言:javascript
复制
     Datetime         Val 
[[2017-01-01 15:00:00, 2],
 [2017-02-05 19:00:00, 3],
 [2018-04-22 15:00:00, 6],
 [2018-08-02 13:00:00, 3],
 [2018-10-03 12:00:00, 3]]

我希望按日期时间将值分组为N个等距的回收箱,然后得到每个组的累积量列表,如果组bin为空,则累积量为1。

我目前的方法是计算第一个和最后一个时间戳,然后使用linspace计算等距的日期时间回收箱,这就是我被困的地方:

代码语言:javascript
复制
n = 5 # 5 equally sized bins
start = pd.Timestamp(df.iloc[0]['datetime'])
end = pd.Timestamp(df.iloc[-1]['datetime'])
bins = np.linspace(start.value, end.value, n+1) # n+1 as linspace is right bound including
groups = pd.to_datetime(bins).values

返回:

代码语言:javascript
复制
 ['2017-01-01T15:00:00.000000000' '2017-05-09T14:24:00.000000000'
 '2017-09-14T13:48:00.000000000' '2018-01-20T13:12:00.000000000'
 '2018-05-28T12:36:00.000000000' '2018-10-03T12:00:00.000000000']

例如,具有5个等距回收箱的输出和上述给定的示例值如下:

代码语言:javascript
复制
 output = [2*3, 1, 1, 6, 3*3] # 1 if there is no "Val" for a bin

有什么有效/干净的方法来解决这个问题吗?我已经查看了pd.Grouper,但是我无法让freq值输出等间隔的日期时间组。我尝试过的另一个解决方案是将日期时间转换为时代,然后使用np.digitize按回收箱进行分类。但这也没能成功。感谢任何帮助,Numpy解决方案也欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-04 05:56:56

您可以使用pd.cut轻松地指定您的回收箱。那么您需要groupby + prod

代码语言:javascript
复制
df.groupby(pd.cut(df.Datetime, bins=5, right=False)).Val.prod()

输出:

代码语言:javascript
复制
Datetime
[2017-01-01 15:00:00, 2017-05-09 14:24:00)           6
[2017-05-09 14:24:00, 2017-09-14 13:48:00)           1
[2017-09-14 13:48:00, 2018-01-20 13:12:00)           1
[2018-01-20 13:12:00, 2018-05-28 12:36:00)           6
[2018-05-28 12:36:00, 2018-10-04 03:21:25.200000)    9
Name: Val, dtype: int64

我们会自动得到您想要的缺少组被1填充的行为,因为使用prod、空Seriesndarrays乘以1。

代码语言:javascript
复制
import numpy as np

np.prod(pd.Series())
#1.0

np.prod(np.ndarray(shape=0))
#1.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53138024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档