Python: hitungan waktu jam bergulir dari variabel kategori

Oct 04 2020

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

RichieV Oct 04 2020 at 02:47

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
PrakritiShaurya Oct 04 2020 at 02:01

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.