带有日期的熊猫专栏操作

谢赫·坦维尔·侯赛因

我有一个数据框,主要带有日期。这是我想做的

我想从旧的日期变量(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章