我有帶有時間戳的資料。用戶回答問題,他們還選擇白天(早上或晚上)。我想洗掉記錄的時間戳和日期不匹配的行。因此,請檢查時間戳是否在上午 6 點至下午 12 點之間,如果“白天”是“晚上”等,則丟棄。
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 和 'daytime' 是晚上 ==> 洗掉行/如果 18:00-00:00 和 'daytime' 是早上 ==> 洗掉行
我試過了:
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)
uj5u.com熱心網友回復:
您可以使用 . 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
uj5u.com熱心網友回復:
6< df['時間戳'].dt.hour < 12
在 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 Serie),你可以很容易地比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532776.html
