我想创建一个名为time_of_day的新列,用于下面的 Dataframe ,以便06-12:59是上午,13-17:59是下午,18-22:59是晚上,其余时间是晚上。
| 身份证|时间|
| --------------|--------------|
| 二十五|00:01|
| 二十五|02:01|
| 二十五|六点五十五分|
| 十八岁|二十二点零三分|
| 十八岁|二十三点三十三分|
| 十八岁|00:33|
"我所期待的"
| 身份证|时间|一天的时间|
| --------------|--------------|--------------|
| 二十五|00:01|夜|
| 二十五|02:01|夜|
| 二十五|六点五十五分|早上好|
| 十八岁|二十二点零三分|晚上|
| 十八岁|二十三点三十三分|夜|
| 十八岁|00:33|夜|
我尝试了numpy矢量化,选择和条件,但失败了。然后我尝试了以下操作:
def conditions(s):
if (pd.to_timedelta(df['TIME']) >= pd.to_timedelta('06:00:00')) & (pd.to_timedelta(df['TIME']) < pd.to_timedelta('13:00:00')):
return "Morning"
elif (pd.to_timedelta(df['TIME']) >= pd.to_timedelta('13:00:00')) & (pd.to_timedelta(df['TIME']) < pd.to_timedelta('18:00:00')):
return "Afternoon"
elif (pd.to_timedelta(df['TIME']) >= pd.to_timedelta('18:00:00')) & (pd.to_timedelta(df['TIME']) < pd.to_timedelta('23:00:00')):
return "Evening"
elif (pd.to_timedelta(df['TIME']) >= pd.to_timedelta('23:00:00')) & (pd.to_timedelta(df['TIME']) < pd.to_timedelta('06:00:00')):
return "Night"
df['TIME_OF_DAY'] = df.apply(conditions, axis=1)
- 值错误:Series的真值不明确。请使用.empty、.bool()、.item()、.any()或.all()。*
如何解决这个问题?PS:我为enf od each if条件添加了.all(),但仍然得到相同的错误。
3条答案
按热度按时间4jb9z9bj1#
使用
pandas.cut
,它将比使用apply
的函数更有效:输出:
如果你需要一个函数:
lsmepo6l2#
假设您在问题中提到的示例DataFrame,您可以进行以下修改以使代码工作:
输出(
df
):woobm2wo3#
输出: