Pandas 动态日期时间周开始
Pandas dynamic date time week start
我正在尝试在我的 pandas 数据框中创建一个动态日期时间函数来识别 'Date' 列中的值,并让我知道 'Week' 中相应的星期开始列。
- 开始一周的日期始终是星期一,除非一周溢出到另一个月
- 如果确实溢出到另一个月,则周末结束日期将是一周开始月份的最后一天
- 新月的第一天将代表溢出日期的一周开始,周末仍为星期日
我在将下面创建的函数合并到 Pandas 数据框时遇到困难:
def week(rawdate):
dt = datetime.strptime(rawdate, '%m/%d/%Y')
currentweekstart = dt - timedelta(days = dt.weekday())
currentweekstart2 = currentweekstart.strftime('%m/%d/%Y')
currentweekmonth = currentweekstart.strftime('%m')
currentweekfinish = currentweekstart + timedelta(days = 6)
currentweekfinish2 = currentweekfinish.strftime('%m/%d/%Y')
currentweekfinishmonth = currentweekfinish.strftime('%m')
if dt.strftime('%m') == currentweekmonth:
currentweekstart2
return currentweekstart2
else: #start date is the 1st date of new month week
nextweekstart = datetime.strptime(currentweekfinish.strftime('%m/1/%Y'), '%m/%d/%Y')
nextweekstart2 = nextweekstart.strftime('%m/%d/%Y')
return nextweekstart2
如有任何帮助,我们将不胜感激!
编辑:使用修改后的变量更新函数
假设您对函数 week(rawdate)
的逻辑是正确的,您可以使用 series.apply
函数将函数应用于一个系列中的所有值(pandas 列),这returns 一个新系列,您可以将其分配给新的 pandas 列。
例子-
df['Week'] = df['Date'].apply(week)
我在函数中看到的一些问题 -
weekstart
未定义(在 else 部分返回)。
也在 if
部分你正在做 - currentweekstart2
- 这是无操作
我正在尝试在我的 pandas 数据框中创建一个动态日期时间函数来识别 'Date' 列中的值,并让我知道 'Week' 中相应的星期开始列。
- 开始一周的日期始终是星期一,除非一周溢出到另一个月
- 如果确实溢出到另一个月,则周末结束日期将是一周开始月份的最后一天
- 新月的第一天将代表溢出日期的一周开始,周末仍为星期日
我在将下面创建的函数合并到 Pandas 数据框时遇到困难:
def week(rawdate):
dt = datetime.strptime(rawdate, '%m/%d/%Y')
currentweekstart = dt - timedelta(days = dt.weekday())
currentweekstart2 = currentweekstart.strftime('%m/%d/%Y')
currentweekmonth = currentweekstart.strftime('%m')
currentweekfinish = currentweekstart + timedelta(days = 6)
currentweekfinish2 = currentweekfinish.strftime('%m/%d/%Y')
currentweekfinishmonth = currentweekfinish.strftime('%m')
if dt.strftime('%m') == currentweekmonth:
currentweekstart2
return currentweekstart2
else: #start date is the 1st date of new month week
nextweekstart = datetime.strptime(currentweekfinish.strftime('%m/1/%Y'), '%m/%d/%Y')
nextweekstart2 = nextweekstart.strftime('%m/%d/%Y')
return nextweekstart2
如有任何帮助,我们将不胜感激!
编辑:使用修改后的变量更新函数
假设您对函数 week(rawdate)
的逻辑是正确的,您可以使用 series.apply
函数将函数应用于一个系列中的所有值(pandas 列),这returns 一个新系列,您可以将其分配给新的 pandas 列。
例子-
df['Week'] = df['Date'].apply(week)
我在函数中看到的一些问题 -
weekstart
未定义(在 else 部分返回)。也在
if
部分你正在做 -currentweekstart2
- 这是无操作