大熊猫可以识别当前日期,并过滤相对于今天日期的日期列

时间:2019-04-13 01:18:58

标签: python-3.x pandas

在pandas / python中转换下面的逻辑时遇到很多麻烦,所以我什至没有示例代码或df可以与:x

一起使用。

我运行了一份每日报告,该报告实际上过滤了从星期一到“今天”的前一天的数据。我有一个Date列[dt.strftime('%#m /%#d /%Y')格式]。永远不会超过周一至周日的范围。

1)在运行报表时识别“今天”这一天,并识别星期一之前的壁橱是哪一天。过滤今天日期之前星期一的“日期”列[dt.strftime('%#m /%#d /%Y')格式]

2)一旦为此过滤了df,请使用上面逻辑中具有日期的这组行,让它在新列“ Date2”中检查日期。如果有任何日期在星期一日期之前,请在Date2中,将“ Date2”中所有这些较早的日期更改为“日期”列中的星期一日期。

3)如果“今天”是星期一,则在“日期”列中从“先前星期一”到“星期日”过滤范围。对此进行过滤后,请执行上述步骤[步骤2],但是对于“ Date2”列中的任何日期,如星期六和星期日,都应将其更改为星期五。

这有意义吗?

1 个答案:

答案 0 :(得分:0)

以下是步骤:

from datetime import datetime

today = pd.to_datetime(datetime.now().date())

day_of_week = today.dayofweek

last_monday = today - pd.to_timedelta(day_of_week, unit='d') 

# if today is Monday, we need to step back another week
if day_of_week == 0:
    last_monday -= pd.to_timedelta(7, unit='d')

# filter for last Monday
last_monday_flags = (df.Date == last_mon)

# filter for Date2 < last Monday
date2_flags = (df.Date2 < last_monday)

# update where both flags are true
flags = last_monday_flags & date2_flags
df.loc[flags, 'Date2'] = last_monday

# if today is Monday
if day_of_week == 0: 
    last_sunday = last_monday + pd.to_timedelta(6, unit='d')
    last_sat = last_sunday - pd.to_timedelta(1, unit='d')

    last_week_flags = (df.Date >= last_monday) & (df.Date <= next_sunday)

    last_sat_flags = (df.Date2 == last_sat)
    last_sun_flags = (df.Date2 == last_sun)

    # I'm just too lazy and not sure how Sat and Sun relates to Fri
    # but i guess just subtract 1 day or 2 depending on which day
    ...