繁体   English   中英

熊猫-识别熊猫列中的日期是在星期六还是星期日

[英]Pandas - Identify if a date in a pandas column is falls on Saturday or Sunday

我想确定日期值是在星期六还是星期日。 如果是,那么我想将上述日期更改为星期五之前的日期。 (示例df和下面的结果df-这些是自2019年5月起的真实日期,如您所见,结果df的前一周有一个星期六(5/4/19)和星期日(5/26/19)日期。(5/2/19)日期保持不变,因为它是工作日而不是周末。

import pandas as pd
data = [['5/3/19','5/4/19'],['5/3/19','5/2/19'],['5/24/19','5/26/19']]
df = pd.DataFrame(data,columns=['Date1','Date2'])
print(df)


data2 = [['5/3/19','5/3/19'],['5/3/19','5/2/19'],['5/24/19','5/24/19']]
resultsdf = pd.DataFrame(data2,columns=['Date1','Date2'])
print(resultsdf)

我正在一个月到日期范围内运行此代码。 我必须具有将大型数据集分组到MTD视图中的代码-但我无法为星期六/星期日列表创建变量(因为每月会有8-10个周末日期),这是我的代码:

import pandas as pd
import xlrd # added when using visual studio 
import datetime
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')
month_day = today.day
start_month_scope = today - pd.to_timedelta(month_day, unit = 'd')
first_day_of_month = start_month_scope + pd.to_timedelta(1, unit = 'd')

以下代码的问题是,仅当我需要查找7天(Mf)期间的星期六和星期日时才有效。

last_sunday = last_monday + pd.to_timedelta(6, unit='d')
last_sat = last_sunday - pd.to_timedelta(1, unit='d')
last_fri = last_sunday - pd.to_timedelta(2, unit='d')

我需要一些变量输入以下代码:

finaldf.loc[(finaldf['Due_Date'] == last_sat), 'Due_Date'] = last_fri

因此,“ last_fri”将只是给定周六或周日的最新星期五,因此,在我的示例df中,有一个5/4/19示例,该示例被拉回到5/3/19(该示例的最后一个星期五) )或5/26/19被拉回到5/24/19。 如您所见,如果日期是周六和周日,则代码必须首先理解,然后是下一个最接近的星期五。

*如果以上所有内容都令人困惑,请参考我的df-> resulftdf *

在您的情况下,将BDaynp.where一起使用

df=df.apply(pd.to_datetime)
from pandas.tseries.offsets import BDay
for x in df.columns:
    df[x]=np.where(df[x].dt.weekday.isin([5,6]),df[x]-BDay(1),df[x])

df
Out[623]: 
       Date1      Date2
0 2019-05-03 2019-05-03
1 2019-05-03 2019-05-02
2 2019-05-24 2019-05-24

我认为这样的事情也是可能的:

finaldf['Due_Date'] = [x + pd.to_timedelta(4 - x.dayofweek, unit='d') if x.dayofweek > 4 else x for x in findaldf.Due_Date]

这是一个班轮:

df.Date1 -= pd.to_timedelta(
    (df.Date1.dt.dayofweek - 4).apply(lambda v: v if v > 0 else 0), unit="D"
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM