我有一个熊猫数据框架,如下所示:
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点
我的输出将具有以下形式(我忽略了输出中的HE
和Date
列):
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
语句。
发布于 2019-04-22 16:22:37
下面是我的多步骤方法
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
列):
+----+---------------------+------------+------------+------+
| | 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 |
+----+---------------------+------------+------------+------+
https://stackoverflow.com/questions/55797048
复制