首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从某一特定时间开始按周分组

如何从某一特定时间开始按周分组
EN

Stack Overflow用户
提问于 2018-11-29 10:49:11
回答 3查看 336关注 0票数 4

我有我希望每周分组的数据。

我已经能够使用以下方法完成这一任务

代码语言:javascript
运行
复制
Data_Frame.groupby([pd.Grouper(freq='W')]).count()

这将创建一个以

代码语言:javascript
运行
复制
2018-01-07  ...

2018-01-14  ...

2018-01-21  ...

这太棒了。但是我需要在06:00开始,所以

代码语言:javascript
运行
复制
2018-01-07 06:00:00 ...

2018-01-14 06:00:00 ...

2018-01-21 06:00:00 ...

我知道我可以将数据转换6个小时,但这似乎是一种欺骗,我确信Grouper具有这样的功能(指定何时开始分组的某种方式)。

我希望有人知道这么做的好方法。

非常感谢

编辑:

我试图在构建的功能中更多地使用pythons,因为它通常工作得更好、更一致。我还将数据本身转换为一个以时间戳作为y列的图形,并且我希望时间戳能够真实地反映数据,而不需要某些方法,例如将所有内容按6小时分组,然后将所有内容重新放置回6小时,以获得正确的时间戳。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-28 12:07:39

因此,要解决这个问题,需要使用Grouper的基参数。

但是,要注意的是,无论使用什么时间段(年份、月份、天数等)对于弗雷克来说,基地也在其中(据我所知)。

因此,当我想在6小时内取代开始位置时,我的频率应该是小时而不是周(即1W =168小时)。

所以我想找的解决办法是

代码语言:javascript
运行
复制
Data_Frame.groupby([pd.Grouper(freq='168H', base = 6)]).count()

这是简单,简短,快速和工作完全符合我的愿望。

不过,感谢所有其他的答案

票数 1
EN

Stack Overflow用户

发布于 2018-11-29 11:53:24

使用双shift

代码语言:javascript
运行
复制
np.random.seed(456)

idx = pd.date_range(start = '2018-01-07', end = '2018-01-09', freq = '2H')
df = pd.DataFrame({'a':np.random.randint(10, size=25)}, index=idx)
print (df)
                     a
2018-01-07 00:00:00  5
2018-01-07 02:00:00  9
2018-01-07 04:00:00  4
2018-01-07 06:00:00  5
2018-01-07 08:00:00  7
2018-01-07 10:00:00  1
2018-01-07 12:00:00  8
2018-01-07 14:00:00  3
2018-01-07 16:00:00  5
2018-01-07 18:00:00  2
2018-01-07 20:00:00  4
2018-01-07 22:00:00  2
2018-01-08 00:00:00  2
2018-01-08 02:00:00  8
2018-01-08 04:00:00  4
2018-01-08 06:00:00  8
2018-01-08 08:00:00  5
2018-01-08 10:00:00  6
2018-01-08 12:00:00  0
2018-01-08 14:00:00  9
2018-01-08 16:00:00  8
2018-01-08 18:00:00  2
2018-01-08 20:00:00  3
2018-01-08 22:00:00  6
2018-01-09 00:00:00  7
代码语言:javascript
运行
复制
#freq='D' for easy check, in original use `W`
df1 = df.shift(-6, freq='H').groupby([pd.Grouper(freq='D')]).count().shift(6, freq='H')
print (df1)
                      a
2018-01-06 06:00:00   3
2018-01-07 06:00:00  12
2018-01-08 06:00:00  10
票数 1
EN

Stack Overflow用户

发布于 2018-11-29 11:42:15

我将创建另一个列,其中包含所需的日期,并对其进行分组。

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

 selected_datetime = pd.date_range(start = '2018-01-07', end = '2018-01-30', freq = '1H')
 df = pd.DataFrame(selected_datetime, columns = ['date'])
 df['value1'] = np.random.rand(df.shape[0])
# specify the condition for your date, eg. starting from 6am
df['shift1'] = df['date'].apply(lambda x: x.date() if x.hour == 6 else np.nan)
# forward fill the na values to have last date
df['shift1'] = df['shift1'].fillna(method = 'ffill')
# you can groupby on this col
df.groupby('shift1')['value1'].mean()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53537273

复制
相关文章

相似问题

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