我在嘗試著
- 從 df 列中的喚醒時間串列中獲取平均喚醒時間,并
- 將它們與目標喚醒時間(更早或更晚)進行比較
import pandas as pd
#convert to datetime object
df['wakeup_time_date']=pd.to_datetime(df['wakeup_time_date'], infer_datetime_format=True)
#extract time
df['wakeup_time']=df['wakeup_time_date'].dt.time
#below doesn't work as the object is no longer a datetime object
df['wakeup_time'].mean()
最后,我想將平均喚醒時間與早上 6:30 進行比較,并確定它是早還是晚。
uj5u.com熱心網友回復:
正如所MrFuppes建議的,可能最簡單的方法是轉換為datetime.timedeltas,而不是datetime.times:
from datetime import datetime, timedelta, time
df = pd.DataFrame({"wakeup_time_date": ["2019/03/04 07:08:58", "2019/03/05 08:08:48", "2019/03/06 10:00:12", "2019/03/10 6:35:32"]})
df['wakeup_time_date']=pd.to_datetime(df['wakeup_time_date'])
df['time'] = df['wakeup_time_date'] - df['wakeup_time_date'].dt.normalize()
mean_td = df['time'].mean()
#Timedelta('0 days 07:58:22.500000')
現在,如果您不介意在 timedeltas 上操作,您可以直接比較它:
goal_td = timedelta(hours=6, minutes=30)
is_mean_later_than_goal = mean_td > goal_td
# True
或將其轉換為 datetime.time 并以這種方式進行比較:
mean_time = (datetime.min mean_td).time()
goal_time = time(hour=6, minute=30)
is_mean_later_than_goal = mean_time > goal_time
# True
uj5u.com熱心網友回復:
這是一個使用 np.where() 的玩具示例,其中 True 行的時間大于 390 分鐘(上午 6:30)且小于 720 分鐘(中午,例如選擇可仲裁性)。首先,使用 dt 屬性創建分鐘列。
沒有看到您的資料很難說,但是如果您有“df 列中的喚醒時間串列”,我可能會設定一個 DatetimeIndex,然后在 np.where() 步驟之前對其進行平均時間聚合的 groupby .
from pandas import Timestamp
import pandas as pd
toy_dict = {'wakeup_time_date': {0: Timestamp('2021-11-11 13:04:44.342843'),
1: Timestamp('2021-11-11 15:43:40.654980'),
2: Timestamp('2021-11-11 17:31:07.409101'),
3: Timestamp('2021-11-11 22:19:14.394725'),
4: Timestamp('2021-11-12 09:03:41.957619'),
5: Timestamp('2021-11-12 09:46:24.849156'),
6: Timestamp('2021-11-12 10:45:07.950917'),
7: Timestamp('2021-11-12 12:27:48.189281'),
8: Timestamp('2021-11-12 12:57:27.112832'),
9: Timestamp('2021-11-12 14:06:17.432817')}}
df = pd.DataFrame(toy_dict)
df['minutes'] = df['wakeup_time_date'].dt.hour * 60 df['wakeup_time_date'].dt.minute df['wakeup_time_date'].dt.second/60
df['past_six_thirty'] = np.where((df['minutes'] > 390) & (df['minutes'] < 720), True, False)
print(df)
wakeup_time_date minutes past_six_thirty
0 2021-11-11 13:04:44.342843 784.733333 False
1 2021-11-11 15:43:40.654980 943.666667 False
2 2021-11-11 17:31:07.409101 1051.116667 False
3 2021-11-11 22:19:14.394725 1339.233333 False
4 2021-11-12 09:03:41.957619 543.683333 True
5 2021-11-12 09:46:24.849156 586.400000 True
6 2021-11-12 10:45:07.950917 645.116667 True
7 2021-11-12 12:27:48.189281 747.800000 False
8 2021-11-12 12:57:27.112832 777.450000 False
9 2021-11-12 14:06:17.432817 846.283333 False
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/406342.html
標籤:
