使用掩码按一周中的多天筛选数据帧

2024-09-27 07:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一个面具来过滤和显示我感兴趣的日期。以下是我当前的代码:

# mask date range 
start_date = '2019-10-01'
end_date = '2019-11-01'
mask1 = (df['StartTime'] >= start_date) & (df['StartTime'] < end_date)

# mask dayofweek
mask2 = (df.StartTime.dt.dayofweek == 0)

mask = mask1 & mask2

#apply mask
df.loc[mask]

上述代码显示了mask2 dayofweek(0=周一)的mask1日期范围(2019-10-01至2019-11-01)内的所有日期。 然而,我对周一到周四感兴趣,所以我需要调整mask2

以下是我尝试过的几件事:

#this doesn't work:
mask2 = (0<=df.StartTime.dt.dayofweek<=3)

#this doesn't work:
mask2 = (df.StartTime.dt.dayofweek == 0) or (df.StartTime.dt.dayofweek == 1) or (df.StartTime.dt.dayofweek == 2) or (df.StartTime.dt.dayofweek == 3)

你能告诉我最好的方法是什么吗?先谢谢你


Tags: or代码dfdatedtmaskthisstart
1条回答
网友
1楼 · 发布于 2024-09-27 07:33:07

一种方法是提取dayofweek,然后使用isin

Ex:

df = pd.DataFrame({
    "StartTime" : ['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04', '2019-10-05', '2019-10-06', '2019-10-07', '2019-10-08']
})
df["StartTime"] = pd.to_datetime(df["StartTime"], format="%Y-%m-%d")
df["dayofweek"] = df["StartTime"].dt.dayofweek

print(df[df["dayofweek"].isin([0,1,2])]['StartTime'])

输出:

0   2019-10-01
1   2019-10-02
6   2019-10-07
7   2019-10-08
Name: StartTime, dtype: datetime64[ns]

相关问题 更多 >

    热门问题