在数据框中现有的时间列上创建一个新列

可见

我必须基于现有时间列创建一个班次列。

例如,我有一个包含详细信息的数据框df1:

   time
0  10:30
1  13:50
2  19:20
3  14:10

我需要一个带有移位条件的数据框,如下所示:

  • 8:30至12:30 =换档1,
  • 12:30至20:20 =班次2
  • 20:30至8:30 =换班3
   time shift
0  10:30    1
1  13:50    2
2  19:20    2
3  23:10    3
阿卜杜

以下内容使用了班次字典,可帮助确定与给定时间相关的班次:

import pandas as pd


df = pd.DataFrame({'time': ['00:00','08:29', '08:30', '08:31', '12:29', '12:30', '12:31', '20:29', '20:30', '20:31', '23:59', '10:30', '13:50', '19:20', '14:10', '23:10']})

# Convert the time column into datetime objects
df.time = pd.to_datetime(df.time).dt.time

# Set up a shifts dictionary
shifts = {('8:30', '12:30'): 1 , ('12:30', '20:30'): 2, ('20:30', '8:30'): 3}

# Convert the keys to datetime objects
shifts = {tuple(map(pd.to_datetime, k)):v for k,v in shifts.items()}

# Expand the datetime objects beyond one day if the second element occurred after the first element
shifts = {(k if k[0].time() < k[1].time() else (k[0],k[1]+pd.to_timedelta('1day'))):v for k,v in shifts.items()}

# Determine shift
def get_shift(time):
    try:
        return shifts.get([k for k in shifts if time in pd.date_range(*k, freq='60S', closed='left').time][0])
    except:
        return 'No Shift'

# Use .apply on the time column to get the shift column
df['shift'] = df.time.apply(get_shift)

print(df)

输出:

#         time  shift
# 0   00:00:00      3
# 1   08:29:00      3
# 2   08:30:00      1
# 3   08:31:00      1
# 4   12:29:00      1
# 5   12:30:00      2
# 6   12:31:00      2
# 7   20:29:00      2
# 8   20:30:00      3
# 9   20:31:00      3
# 10  23:59:00      3
# 11  10:30:00      1
# 12  13:50:00      2
# 13  19:20:00      2
# 14  14:10:00      2
# 15  23:10:00      3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在数据框中创建一个新列,以根据现有的dd / mm / yy列显示星期几吗?蟒蛇

大熊猫:从现有的列值创建一个新的数据框

根据熊猫中另一列上的值在数据框中创建一个新列

根据现有数据框中的其他列创建一个新列

从现有的一个创建新的DataFrame列?

从现有的熊猫数据帧创建一个新列以查找文件的版本

根据现有的日期列在数据框中创建标签列

删除列的数字(零)并在数据框中创建一个新列

使用条件从数据框中的现有变量创建一个新变量

如何在多列上自加入一个 Pandas 数据框并创建一个带有新列的新框架(新列只有右侧的信息)

熊猫:在数据框中创建两个新列,并使用从现有列中计算出的值

熊猫:在数据框中创建两个新列,并使用从现有列中计算出的值

在数据框中使用现有变量名称创建一个新变量,在匹配每个变量列表中的非 NA 值时填充它

如何通过现有的数据帧创建一个新的数据帧?

如何根据另一个数据框中的条件在数据框中创建新列?

如何使一个和下一个列在数据帧从现有的数据帧?

从现有的plist创建一个新的plist?

在 python 中创建一个带有“while”循环的函数,并使用该函数在数据框中生成一个新列

通过将现有的 Pandas 列值作为参数传递给 API 调用,在数据框中创建新列

根据现有列中的条件在数据框中创建新列

如何根据 Jupyter 中的现有列在数据框中创建新列?

根据与另一个数据框的匹配在数据框中创建新列

从现有的散列数组创建一个新的散列

如何使用条件从现有列在数据框中创建新列?

基于现有列在数据框中创建新的累积列

在数据框中创建一个新列,该列具有列表中该行的其他列的值

根据现有数据框的条件创建一个新的数据框

python可以从现有数据框创建一个新的数据框吗?

我有一个时间序列图。想要在数据框的另一列上加上虚线