使用掩码按一周中的多天过滤数据框
Using mask to filter dataframe by multiple day of week
我正在尝试使用掩码来过滤和显示我感兴趣的日期。这是我当前的代码:
# 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 星期几(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)
你能告诉我最好的方法是什么吗?提前谢谢你。
一种方法是提取 dayofweek
然后使用 isin
例如:
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]
我正在尝试使用掩码来过滤和显示我感兴趣的日期。这是我当前的代码:
# 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 星期几(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)
你能告诉我最好的方法是什么吗?提前谢谢你。
一种方法是提取 dayofweek
然后使用 isin
例如:
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]