我有一个数据集,其中包含一个月的日期时间列,我需要将它分成两个块(白天和晚上或am\pm),然后将每个块中的时间离散到10分钟的bin中。我可以添加另一列0和1来表示它是am或pm,但我不能对其进行离散化!你能帮我一下吗?
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发布于 2021-11-21 22:47:47
如果我理解正确的话,您正在尝试为每10分钟的间隔添加一列,以指示观察是否来自该时间间隔。
可使用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
...
...
...https://stackoverflow.com/questions/70058128
复制相似问题