首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据自定义日长定义对连续周末进行分组

根据自定义日长定义对连续周末进行分组
EN

Stack Overflow用户
提问于 2019-04-22 23:45:37
回答 1查看 25关注 0票数 1

我有一个熊猫数据框架,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
dateInfo[['HE', 'Date']].ix[1:4]
                     HE       Date
DateTime                          
2001-01-01 02:00:00   2 2001-01-01
2001-01-01 03:00:00   3 2001-01-01
2001-01-01 04:00:00   4 2001-01-01

Dates的范围从2001年到2031年。有没有办法创建一个列StartDate,其中日期定义在今天上午11点到明天上午10点之间。除非是周末,因为开始时间是星期六上午11点,到星期二上午10点

我的输出将具有以下形式(我忽略了输出中的HEDate列):

代码语言:javascript
代码运行次数:0
运行
复制
DateTime        StartDate
4/3/2019 11:00  4/3/2019
4/3/2019 12:00  4/3/2019
4/4/2019 7:00   4/3/2019
4/4/2019 10:00  4/3/2019
4/4/2019 11:00  4/4/2019
4/5/2019 10:00  4/4/2019
4/6/2019 11:00  4/6/2019
4/6/2019 12:00  4/6/2019
4/8/2019 23:00  4/6/2019
4/9/2019 9:00   4/6/2019
4/9/2019 10:00  4/6/2019
4/9/2019 11:00  4/9/2019

我根本不知道怎么做,我觉得即使是for loop也会涉及到很多if then语句。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-23 00:22:37

下面是我的多步骤方法

代码语言:javascript
代码运行次数:0
运行
复制
hours_shift = (df.DateTime.dt.hour <= 10)
df['date'] = pd.to_datetime(df.DateTime.dt.date)
df['day'] = df.date.dt.dayofweek

# shift Tuesdays
tues_shift = (df.day == 1) & hours_shift
df.loc[tues_shift, 'date'] -= pd.Timedelta(days=3)

# shift Mondays
mon_shift = (df.day==0)
df.loc[mon_shift, 'date'] -= pd.Timedelta(days=2)

# shift Sundays
sun_shift = (df.day==6)
df.loc[sun_shift, 'date'] -= pd.Timedelta(days=1)

# mark all the shifted
shifted = tues_shift | mon_shift | sun_shift

# shift the rest
hours_shift = hours_shift & ~shifted
df.loc[hours_shift, 'date'] -= pd.Timedelta(days=1)

df

输出(date列):

代码语言:javascript
代码运行次数:0
运行
复制
+----+---------------------+------------+------------+------+
|    |      DateTime       | StartDate  |    date    |  day |
+----+---------------------+------------+------------+------+
|  0 | 2019-04-03 11:00:00 | 2019-04-03 | 2019-04-03 |    2 |
|  1 | 2019-04-03 12:00:00 | 2019-04-03 | 2019-04-03 |    2 |
|  2 | 2019-04-04 07:00:00 | 2019-04-03 | 2019-04-03 |    3 |
|  3 | 2019-04-04 10:00:00 | 2019-04-03 | 2019-04-03 |    3 |
|  4 | 2019-04-04 11:00:00 | 2019-04-04 | 2019-04-04 |    3 |
|  5 | 2019-04-05 10:00:00 | 2019-04-04 | 2019-04-04 |    4 |
|  6 | 2019-04-06 11:00:00 | 2019-04-06 | 2019-04-06 |    5 |
|  7 | 2019-04-06 12:00:00 | 2019-04-06 | 2019-04-06 |    5 |
|  8 | 2019-04-08 23:00:00 | 2019-04-06 | 2019-04-06 |    0 |
|  9 | 2019-04-09 09:00:00 | 2019-04-06 | 2019-04-06 |    1 |
| 10 | 2019-04-09 10:00:00 | 2019-04-06 | 2019-04-06 |    1 |
| 11 | 2019-04-09 11:00:00 | 2019-04-09 | 2019-04-09 |    1 |
+----+---------------------+------------+------------+------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55797048

复制
相关文章

相似问题

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