Python: hitungan waktu jam bergulir dari variabel kategori
Saya memiliki kerangka data panda dengan kolom ['DateTime', 'Variable'], dan saya mencoba menghitung bergulir dalam satu jam terakhir untuk masing-masing Variable. Pivot berpikir bisa digunakan entah bagaimana.
Contoh data
DateTime Variable
8/24/19 3:30PM A
8/24/19 3:32PM A
8/24/19 3:36PM B
8/24/19 3:50PM C
8/25/19 2:50PM A
Output yang diharapkan
DateTime A B C
8/24/19 3:30PM 1 0 0
8/24/19 3:32PM 2 0 0
8/24/19 3:36PM 2 1 0
8/24/19 3:50PM 2 1 1
8/25/19 2:50PM 1 0 0
Variabel baru dapat ditambahkan atau dihapus jadi saya ingin memiliki solusi yang dinamis.
Jawaban
Anda bisa sebenarnya memulai dengan pivot, atau melakukannya dengan tangan dengan groupby.unstack.
Kemudian Anda mencari untuk df.rollingmembuat jendela bergulir yang dapat digabungkan dengan banyak fungsi. Agar jendela dibuat dengan timedelta (1 jam dalam kasus ini) Anda perlu memastikan indeks datetimejenisnya.
df['DateTime'] = pd.to_datetime(df['DateTime'])
out = (
df
.groupby(['DateTime', 'Variable']) # set the columns as index
.size() # aggregate by row count
.unstack(fill_value=0) # move 'Variable' index level to columns
.sort_index()
)
out = out.rolling('1h').sum()
Keluaran
Variable A B C
DateTime
2019-08-24 15:30:00 1.0 0.0 0.0
2019-08-24 15:32:00 2.0 0.0 0.0
2019-08-24 15:36:00 2.0 1.0 0.0
2019-08-24 15:50:00 2.0 1.0 1.0
2019-08-25 14:50:00 1.0 0.0 0.0
Mempertimbangkan df adalah kumpulan data Anda: new_df = df [df ['Variable'] == 'A']. Resample ('H'). Count ()
Anda dapat membuat kerangka data baru sebagai berikut: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})
Demikian pula, ambil hitungan untuk setiap kategori kolom Variabel dan coba gabungkan ke final_df menggunakan loop.
Saya belum mencobanya tapi semoga berhasil.