Pandas 根据自定义日长定义对连续周末进行分组
我有一个熊猫数据框,如下所示:Pandas 根据自定义日长定义对连续周末进行分组,pandas,python-3.5,Pandas,Python 3.5,我有一个熊猫数据框,如下所示: 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 日期范围从2001年到2031年。是否有方法创建一
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
日期范围从2001年到2031年。是否有方法创建一个列StartDate
,其中日期定义在今天上午11点到明天上午10点之间。除非是周末,开始时间是周六上午11点,到周二上午10点
我的输出将具有以下形式(我忽略了输出中的HE
和Date
列):
我根本不知道怎么做,即使是for循环
也会涉及很多如果然后
语句,我觉得。这是我的多步骤方法
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
这是我的多步骤方法
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
+----+---------------------+------------+------------+------+
| | 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 |
+----+---------------------+------------+------------+------+