我有一個帶有日期時間索引的資料框,我想使用列計算獲得每行當天下午 4:00(或 16:00)前剩余的分鐘數。
使用這篇文章的答案,我們可以創建一個帶有一些隨機日期時間的空資料框并將其分配給索引:
def random_datetimes_or_dates(start, end, out_format='datetime', n=10):
(divide_by, unit) = (10**9, 's') if out_format=='datetime' else (24*60*60*10**9, 'D')
start_u = start.value//divide_by
end_u = end.value//divide_by
return pd.to_datetime(np.random.randint(start_u, end_u, n), unit=unit)
start = pd.to_datetime('2019-01-01')
end = pd.to_datetime('2021-12-31')
index = random_datetimes_or_dates(start, end, out_format='datetime')
df = pd.DataFrame(index=index)
例如,如果索引 n 處的日期時間為2021-11-29 15:30:00,則該行的新列中的值應為30。如果是 16:00 之后,則數字為負數就可以了。
我最初嘗試的是這樣的:
df['Minutes_Until_4PM'] = datetime.strptime("1600", "%H%M").time() - df.index.time()
...但這給出了錯誤:
TypeError: 'numpy.ndarray' object is not callable
...這很好,但我什至不確定我是否以正確的方式解決這個問題,這個錯誤可能只是因為我提供的可重現代碼,但你明白我想要做什么, 不使用for回圈。
uj5u.com熱心網友回復:
一種選擇是將您的日期時間放入時間戳(以秒為單位),取一天中秒數的模數(只保留自午夜以來的秒數),從午夜到下午 4 點之間的秒數中減去,然后除以 60 得到分鐘數:
df['Minutes_Until_4PM'] = ((16 * 60 * 60) - df.timestamp.mod(24 * 60 * 60)) // 60
請注意, // 將劃分除法,這可能不是您正在尋找的行為型別...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395396.html
上一篇:如何將用戶輸入格式化為日期變數?
