熊猫将周日期转换为周末星期五日期

Kar*_*tik 4 python date pandas

我有一个熊猫数据框,其列的日期如下:

DATE
01/16/2017
01/17/2017
01/18/2017
01/19/2017
01/20/2017
Run Code Online (Sandbox Code Playgroud)

我需要将这些日期中的每个日期转换为周末日期,该日期是该对应星期的星期五的日期。因此,添加一个新列,生成一个如下所示的数据框:

DATE       WEEK_ENDING
01/16/2017  01/20/2017
01/17/2017  01/20/2017
01/18/2017  01/20/2017
01/19/2017  01/20/2017
01/20/2017  01/20/2017
Run Code Online (Sandbox Code Playgroud)

本质上,我正在寻找有关此问题的熊猫解决方案,以 获取日期为本周结束的星期五

日期本身的格式并不那么重要。有内置的功能可以做到这一点,还是我必须编写一个?谢谢!

EdC*_*ica 6

您可以使用内置的DateOffsets实现此目的:

In [310]:
from pandas.tseries.offsets import *
df['WEEK ENDING'] = df['DATE'] + Week(weekday=4)
df

Out[310]:
        DATE WEEK ENDING
0 2017-01-16  2017-01-20
1 2017-01-17  2017-01-20
2 2017-01-18  2017-01-20
3 2017-01-19  2017-01-20
4 2017-01-20  2017-01-27
Run Code Online (Sandbox Code Playgroud)

请注意,从技术上讲,因为最后一天会延续到下一周,所以您还需要先使用以下命令将日期字符串转换为日期时间pd.to_datetime

df['DATE'] = pd.to_datetime(df['DATE'])
Run Code Online (Sandbox Code Playgroud)

您可以通过测试,如果算出偏移相同减去一个星期,使用原始数据修复的最后一行where

In [316]:
from pandas.tseries.offsets import *
df['WEEK ENDING'] = df['DATE'].where( df['DATE'] == (( df['DATE'] + Week(weekday=4) ) - Week()), df['DATE'] + Week(weekday=4))
df

Out[316]:
        DATE WEEK ENDING
0 2017-01-16  2017-01-20
1 2017-01-17  2017-01-20
2 2017-01-18  2017-01-20
3 2017-01-19  2017-01-20
4 2017-01-20  2017-01-20
Run Code Online (Sandbox Code Playgroud)

在这里它使最后一行保持不变