0

我在 df 中有一个列,其中包含与该行的客户每周时间相关的数值。例如0 = Sunday 12:00am24 将是 Monday 12:00am5 将是 Sunday 5:00am

  Value 
    0
    4
    10
    24

  Value  Expected Output Column
    0           Sunday 12:00am
    4           Sunday 4:00am
    10          Sunday 10:00am
    24          Monday 12:00am
    49          Tuesday 1:00am

如果我希望将所有值分配给一周中正确的相应日期和时间,如何创建新列?值从 0 开始,表示星期天上午 12:00 的第一个值,到 167 结束,即该周的星期六晚上 11:59。

谢谢!

4

2 回答 2

2

这可以满足您的要求:

Value = pd.Series([0, 4, 10, 24, 49])
AnyGivenSunday = pd.to_datetime('Sunday 2020') # yes this works
(AnyGivenSunday + pd.to_timedelta(Value, 'h')).dt.strftime('%A %I:%M%P')
于 2020-01-30T08:44:41.653 回答
0
import pandas as pd
from datetime import datetime
import calendar as cal

df = pd.DataFrame(data={'val': [0, 0, 0, 0, 0], 'date': ["Sunday 12:00am", "Sunday 4:00am", "Sunday 10:00am", "Monday 12:00am", "Tuesday 1:00am"]})

def convertDate(dateString):
    hour = datetime.strptime(dateString, '%A %I:%M%p').hour # Convert to 24 hour format
    day, time = dateString.split(" ") # Get text of day, cannot get datetime.weekday() without full date
    if day.lower() == cal.day_name[6].lower(): # cal.day_name index starts at Monday and not Sunday
        return hour + ((list(cal.day_name).index(day) - 6) * 24)
    else:
        return hour + ((list(cal.day_name).index(day) + 1) * 24)

df['val'] = df['date'].apply(convertDate) # Apply function to all columns
于 2020-01-30T09:37:49.430 回答