我得到了一个日期/时间以秒为单位的 Dataframe ,我更改了它:
df["start"] = pd.to_datetime(df["start"], unit='s')
df["time"] = df["start"].dt.time
现在我想添加一列df[“timeofday”],其中包含时间字符串。
晚上0:00 - 5:59
上午6:00 - 11:59
下午12:00 - 17:59
晚上18:00 - 21:59
晚上22:00 - 23:59
我假设我需要使用一个for循环和between_time()。但是,这不起作用,因为我似乎需要使用time列作为 Dataframe 的索引列。但是, Dataframe 有一个我不想丢失的索引。即使我可以添加第二个索引,然后对每个时间段进行过滤,我不清楚如何将相应的字符串插入到新的timeofday列中。
我试着过滤
df.time.between_time('02:00', '03:30')
这就导致了
TypeError:索引必须是日期时间索引
因此我假设需要将time列设置为新索引
df.set_index("time", inplace=True)
df["timeofday"] = 'night'
df["timeofday"][df.time.between_time('06:00', '11:59')] = "morning"
这导致相同的
TypeError:索引必须是日期时间索引
在那之后我试着
df.set_index("start", inplace=True)
df["timeofday"] = 'night'
df["timeofday"][df.between_time('06:00', '11:59')] = "morning"
导致
设置复制警告:尝试在DataFrame InvalidIndexError的切片副本上设置值
2条答案
按热度按时间wz8daaqr1#
找到解决方案
3htmauhk2#
我们可以使用
pandas.DataFrame.loc
和pandas.Series.between
来完成这个任务。溶液
结果