Saya memiliki kolom di df yang berisi nilai numerik yang berkorelasi dengan jam pelanggan dalam seminggu untuk baris itu. Misalnya 0 = Minggu pukul 12:00 dan 24 adalah Senin pukul 12:00 dan 5 adalah hari Minggu pukul 05:00.

  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

Bagaimana saya bisa membuat kolom baru jika saya ingin semua nilai ditetapkan ke Hari dan waktu yang sesuai untuk minggu itu? Nilai mulai dari 0 yang akan mewakili hari Minggu pukul 12:00 nilai pertama minggu itu dan akan berakhir pada 167 yang akan menjadi Sabtu 23:59 minggu itu.

Terima kasih!

0
Chris90 30 Januari 2020, 11:30

2 jawaban

Jawaban Terbaik

Ini melakukan apa yang Anda inginkan:

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')
2
John Zwinck 30 Januari 2020, 08:44
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
0
Lambo 30 Januari 2020, 09:37