gpt4 book ai didi

python - 根据数据框中的现有时间列创建新列

转载 作者:行者123 更新时间:2023-11-28 18:23:17 25 4
gpt4 key购买 nike

我必须根据现有时间列创建一个类次列。

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

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

我需要一个数据框,它看起来像下面的移位条件:

  • 8:30 到 12:30 = 第一类,
  • 12:30 到 20:20 = 第二类
  • 20:30 到 8:30 = 第三类
   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

关于python - 根据数据框中的现有时间列创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com