我有一個包含一個月日期時間列的資料集,我需要將它分成兩個塊(白天和黑夜或 am\pm),然后將每個塊中的時間離散為 10 分鐘的區間。我可以添加另一列 0 和 1 以顯示它是上午還是下午,但我無法對其進行離散化!你能幫我嗎?
df['started_at'] = pd.to_datetime(df['started_at'])
df['start hour'] = df['started_at'].dt.hour.astype('int')
df['mor/aft'] = np.where(df['start hour'] < 12, 1, 0)
df['started_at']
0 16:05:36
2 06:22:40
3 16:08:10
4 12:28:57
6 15:47:30
...
3084526 15:24:24
3084527 16:33:07
3084532 14:08:12
3084535 09:43:46
3084536 17:02:26
uj5u.com熱心網友回復:
如果我理解正確,您將嘗試為每十分鐘的間隔添加一列,以指示觀察是否來自該時間間隔。
您可以使用lambda expressions回圈遍歷系列中的每個觀察值。
除以 10 并將其設為整數可得出分鐘的第一位數字,您可以根據該數字添加指標列。
我還包括如何使用 a 提取日期指標列lambda expression供您進行比較。它與您的np.where().
import pandas as pd
from datetime import datetime
# make dataframe
df = pd.DataFrame({
'started_at': ['14:20:56',
'00:13:24',
'16:01:33']
})
# convert column to datetime
df['started_at'] = pd.to_datetime(df['started_at'])
# make day indicator column
df['day'] = df['started_at'].apply(lambda ts: 1 if ts.hour > 12 else 0)
# make indicator column for every ten minutes
for i in range(24):
for j in range(6):
col = 'hour_' str(i) '_min_' str(j) '0'
df[col] = df['started_at'].apply(lambda ts: 1 if int(ts.minute/10) == j and ts.hour == i else 0)
print(df)
輸出第一列:
started_at day hour_0_min_00 hour_0_min_10 hour_0_min_20
0 2021-11-21 14:20:56 1 0 0 0
1 2021-11-21 00:13:24 0 0 1 0
2 2021-11-21 16:01:33 1 0 0 0
...
...
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364471.html
下一篇:期貨資料上的Python日期時間
