如何离散化日期时间列?
How to discretize a datetime column?
我有一个数据集,其中包含一个月的日期时间列,我需要将其分成两个块(白天和黑夜或 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
如果我理解正确的话,您正尝试为每十分钟的时间间隔添加一列以指示观察是否来自该时间间隔。
您可以使用 lambda expressions
遍历系列中的每个观察值。
除以 10 并将其设为整数得到分钟的第一位数字,您可以根据它添加指标列。
我还包括了如何使用 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
...
...
...
我有一个数据集,其中包含一个月的日期时间列,我需要将其分成两个块(白天和黑夜或 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
如果我理解正确的话,您正尝试为每十分钟的时间间隔添加一列以指示观察是否来自该时间间隔。
您可以使用 lambda expressions
遍历系列中的每个观察值。
除以 10 并将其设为整数得到分钟的第一位数字,您可以根据它添加指标列。
我还包括了如何使用 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
...
...
...