Saya memiliki kumpulan data dengan beberapa pengamatan numerik dengan waktu mulai dan berakhir untuk itu. Saya mencoba menetapkan bin untuk setiap pengamatan, setiap bin adalah 5 menit, yang harus ditetapkan jika transaksi dimulai pada interval itu. (Saya menjelajahi opsi resampling di panda tetapi di sana saya tidak dapat menemukan cara untuk mempertahankan atribut pengamatan yang unik, misalnya jumlah)

data
id     start               end                 amt count
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1
1004 2017-07-01 08:09:30 2017-07-01 09:03:35 250   1
1006 2017-07-01 09:54:50 2017-07-01 10:26:31 50    1

timebins
0 00:00:00
1 00:05:00
2 00:10:00

Keluaran yang diinginkan adalah,

id       start           end                 amt count    bin 
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1      08:00
2
rpwr021 15 Agustus 2017, 23:44

2 jawaban

Jawaban Terbaik

Mengingat bahwa data dapat langsung digunakan dalam format datetime, saya menggunakan dt untuk mengakses waktu

def makebins(x):
    x=pd.to_datetime(x)
    return str(x.hour) + ":" + str(int(x.minute/5)*5)

df["bins"] = df['start'].apply(makebins)
3
rpwr021 15 Agustus 2017, 22:39

Anda dapat menyambungkan string stempel waktu mulai dan membulatkan ke bawah ke interval 5 menit terdekat:

def binify(timestamp):
    h, m, s = timestamp.split()[1].split(':')
    m = int(m)
    m = m - (m % 5) 
    return h + ':' + str(m).zfill(2)

df['bin'] = [binify(x) for x in df['start']]
1
brennan 15 Agustus 2017, 22:46