我有一个数据框,主要带有日期。这是我想做的
我想从旧的日期变量(DTDate)创建一个新的日期变量,如果旧的日期是星期一,新的日期将是相同的,但是如果旧的日期是星期一以外的任何日期,那么新的日期将给我下周一的日期。因此,最终所有新日期中的项目都将仅在星期一进行。
我一直在尝试一个功能并申请。这是我的数据集和代码
Date call DTDate weekday weekdayNo
0 31/12/2014 2014-12-31 Wednesday 3
1 29/10/2014 2014-10-29 Wednesday 3
2 28/10/2014 2014-10-28 Tuesday 2
3 27/3/2015 2015-03-27 Friday 5
4 27/2/2015 2015-02-27 Friday 5
5 27/11/2014 2014-11-27 Thursday 4
6 27/10/2014 2014-10-27 Monday 1
7 26/3/2015 2015-03-26 Thursday 4
8 26/2/2015 2015-02-26 Thursday 4
9 26/12/2014 2014-12-26 Friday 5
10 26/11/2014 2014-11-26 Wednesday 3
11 26/10/2014 2014-10-26 Sunday 0
12 25/3/2015 2015-03-25 Wednesday 3
13 25/12/2014 2014-12-25 Thursday 4
14 24/3/2015 2015-03-24 Tuesday 2
15 24/2/2015 2015-02-24 Tuesday 2
16 24/12/2014 2014-12-24 Wednesday 3
17 24/11/2014 2014-11-24 Monday 1
18 23/3/2015 2015-03-23 Monday 1
该代码是
from datetime import date, timedelta
def AddDate(row):
if row['weekdayNo']==0:
return row['DTDate'] + timedelta(days=1)
elif row['weekdayNo'] ==2:
return row['DTDate'] + timedelta(days=6)
elif row['weekdayNo'] ==3:
return row['DTDate'] + timedelta(days=5)
elif row['weekdayNo'] ==4:
return row['DTDate'] + timedelta(days=4)
elif row['weekdayNo'] ==5:
return row['DTDate'] + timedelta(days=3)
elif row['weekdayNo'] ==6:
return row['DTDate'] + timedelta(days=2)
else:
return row['DTDate']
DF['newDate'] = DF.apply(AddDate, axis=1)
我得到以下内容,这是完全一样的东西,没有任何改变
Date call DTDate weekday weekdayNo newDate
0 31/12/2014 2014-12-31 Wednesday 3 2014-12-31
1 29/10/2014 2014-10-29 Wednesday 3 2014-10-29
2 28/10/2014 2014-10-28 Tuesday 2 2014-10-28
3 27/3/2015 2015-03-27 Friday 5 2015-03-27
4 27/2/2015 2015-02-27 Friday 5 2015-02-27
5 27/11/2014 2014-11-27 Thursday 4 2014-11-27
6 27/10/2014 2014-10-27 Monday 1 2014-10-27
7 26/3/2015 2015-03-26 Thursday 4 2015-03-26
8 26/2/2015 2015-02-26 Thursday 4 2015-02-26
9 26/12/2014 2014-12-26 Friday 5 2014-12-26
10 26/11/2014 2014-11-26 Wednesday 3 2014-11-26
11 26/10/2014 2014-10-26 Sunday 0 2014-10-26
12 25/3/2015 2015-03-25 Wednesday 3 2015-03-25
13 25/12/2014 2014-12-25 Thursday 4 2014-12-25
14 24/3/2015 2015-03-24 Tuesday 2 2015-03-24
15 24/2/2015 2015-02-24 Tuesday 2 2015-02-24
16 24/12/2014 2014-12-24 Wednesday 3 2014-12-24
17 24/11/2014 2014-11-24 Monday 1 2014-11-24
18 23/3/2015 2015-03-23 Monday 1 2015-03-23
我也认为,这个想法不好,如果有更好的东西,请任何人想提一下,那可能是什么?提前致谢
AddDate
可以使功能更简单,仅需一个衬套
In [34]: df['newDate'] = df['DTDate'].apply(lambda x: x + timedelta(days=7-x.dayofweek)
if x.dayofweek else x)
在这里,lambda函数如果不是星期一,则lambda x: x + timedelta(days=7-x.dayofweek) if x.dayofweek else x
添加delta =7-x.dayofweek
天。
为了验证新的,weekday
让我们创建一个新的列newdayofweek
In [35]: df['newdayofweek'] = df['newDate'].apply(lambda x: x.dayofweek)
In [36]: df
Out[36]:
Date call DTDate weekday weekdayNo newDate newdayofweek
0 0 31/12/2014 2014-12-31 Wednesday 3 2015-01-05 0
1 1 29/10/2014 2014-10-29 Wednesday 3 2014-11-03 0
2 2 28/10/2014 2014-10-28 Tuesday 2 2014-11-03 0
3 3 27/3/2015 2015-03-27 Friday 5 2015-03-30 0
4 4 27/2/2015 2015-02-27 Friday 5 2015-03-02 0
5 5 27/11/2014 2014-11-27 Thursday 4 2014-12-01 0
6 6 27/10/2014 2014-10-27 Monday 1 2014-10-27 0
7 7 26/3/2015 2015-03-26 Thursday 4 2015-03-30 0
8 8 26/2/2015 2015-02-26 Thursday 4 2015-03-02 0
9 9 26/12/2014 2014-12-26 Friday 5 2014-12-29 0
10 10 26/11/2014 2014-11-26 Wednesday 3 2014-12-01 0
11 11 26/10/2014 2014-10-26 Sunday 0 2014-10-27 0
12 12 25/3/2015 2015-03-25 Wednesday 3 2015-03-30 0
13 13 25/12/2014 2014-12-25 Thursday 4 2014-12-29 0
14 14 24/3/2015 2015-03-24 Tuesday 2 2015-03-30 0
15 15 24/2/2015 2015-02-24 Tuesday 2 2015-03-02 0
16 16 24/12/2014 2014-12-24 Wednesday 3 2014-12-29 0
17 17 24/11/2014 2014-11-24 Monday 1 2014-11-24 0
18 18 23/3/2015 2015-03-23 Monday 1 2015-03-23 0
注意:星期几,星期一= 0,星期日= 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句