如何检查时间戳和日周期,然后删除不匹配



我有带时间戳的数据。用户回答问题,他们也可以选择白天的时段(早上或晚上)。我想删除行记录的时间戳和日周期不匹配。因此,检查时间戳是否在6am-12pm之间,并丢弃"daytime";是"晚上",等等

df
timestamps          daytime
2020-04-10 11:40    Morning
2022-04-12 19:32    Morning *(discard)*
2022-04-12 20:53    Evening
2022-04-15 22:50    Morning *(discard)*
2022-04-16 09:31    Evening*(discard)*

规则应该是:如果在06:00-12:00和"白天"之间是Evening ==>删除行/如果在18:00 - 00:00和'daytime'是Morning ==>删除行

我试过:

remove = df[ (6< df['timestamp'].dt.hour < 12  & df['period'] == 'Evening') 
| (18< df['timestamp'].dt.hour < 23  & df['period'] == 'Morning')]
df.drop(remove , inplace=True)

可以使用.query()来过滤。

df["timestamps"] = pd.to_datetime(df["timestamps"])
df = df.query(
"timestamps.dt.hour.between(6, 12, inclusive='both') & daytime.eq('Morning') | "
"timestamps.dt.hour.between(18, 23, inclusive='both') & daytime.eq('Evening')"
).reset_index(drop=True)
print(df)
timestamps  daytime
0 2020-04-10 11:40:00  Morning
1 2022-04-12 20:53:00  Evening

6

这样的三重操作在Python上还不可能…

我将创建一个像 这样的函数
def get_part_of_day(h):
return (
"morning"
if 6 <= h <= 12
else "afternoon"
if 18 <= h <= 23
else "night"
)

df['datetime'].dt.hour.apply(get_pat_of_day) 

将给你一个列(pandas系列),你可以很容易地比较。

相关内容

最新更新