python - “是否有基于数据框另一列的某些值添加新列的 pandas 函数?”
问题描述
我正在尝试根据另一列中的时间值在数据框中创建一个新列,即如果时间在 06:00:00 和 12:00:00 之间,那么早上,如果时间在 12:0:00 和 15:00 之间:00 下午等
我尝试使用 for 循环和 if else 语句,但我的数据框有 1549293 行,因此循环不可执行
import datetime
import time
times= [datetime.time(6,0,0),datetime.time(12,0,0),datetime.time(15,0,0),datetime.time(20,0,0),datetime.time(23,0,0)]
times
df['time']=df['start_time'].dt.time
df['day_interval']=df['time']
for i in range(0,df.shape[0]):
if df['time'][i] >= times[0] and df['time'][i] < times[1]:
df['day_interval'][i]= "Morning"
elif df['time'][i] >= times[1] and df['time'][i] < times[2]:
df['day_interval'][i]= "Afternoon"
elif df['time'][i] >= times[2] and df['time'][i] < times[3]:
df['day_interval'][i]= "Evening"
elif df['time'][i] >= times[3] and df['time'][i] < times[4]:
df['day_interval'][i]= "Night"
elif df['time'][i] >= times[4]:
df['day_interval'][i]= "Late Night"
if df['time'][i] < times[0]:
df['day_interval'][i]= "Early Hours"
有什么方法可以减少处理时间
解决方案
使用通知我在你的00:00:00 和 23:59:59pd.cut
添加两次times
pd.cut(s1,bins=pd.to_datetime(pd.Series(times),format='%H:%M:%S').tolist(),labels=['Early','M','A','E','N','L'])
0 Early
1 M
Name: time, dtype: category
Categories (6, object): [Early < M < A < E < N < L]
数据设置
times= [datetime.time(0,0,0),datetime.time(6,0,0),datetime.time(12,0,0),datetime.time(15,0,0),datetime.time(20,0,0),datetime.time(23,0,0),datetime.time(23,59,59)]
s1=pd.to_datetime(df.time,format='%H:%M:%S')
推荐阅读
- java - 服务器错误,状态代码:400,错误代码:100005,消息:您已超出组织的内存限制
- css - CSS 的样式链接语法
- vue.js - 我可以在 Vue 上拥有一个全局 mixin 和一个导入的 mixin 吗?
- java - 在 gitlab 中安排一个仅执行单个测试的管道
- javascript - 如何在对象数组中找到所有具有 ID 的记录?
- python - Python套接字setdefaulttimeout方法不起作用
- wordpress - 如何在 WordPress 中将重力形式添加到博客页面(帖子页面)
- git - 在 Visual Studio Code 中尝试“git revert”时出错
- asp.net - SQLServer 存在哪些会话提供程序类型?
- azure - 在 VM 上使用 az 安装程序 - 通过 azure powershell