Python: kategorik değişkenlerin hareketli saat sayısı
Sütunları olan bir pandalar veri çerçevem var ['DateTime', 'Variable']ve her biri için son bir saatte bir yuvarlanan sayı almaya çalışıyorum Variable. Düşünme ekseni bir şekilde kullanılabilir.
Örnek veri
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
Beklenen çıktı
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
Yeni değişkenler eklenebilir veya kaldırılabilir, bu nedenle dinamik bir çözüme sahip olmak istiyorum.
Yanıtlar
Sen aslında başlayabiliriz pivotveya bunu yaparken elle ile groupby.unstack.
O halde, birçok işlevle bir araya getirilebilen kayan pencerelerdf.rolling oluşturmak istiyorsunuz . Pencerelerin bir timedelta (bu durumda 1 saat) ile oluşturulabilmesi için dizinin tipte olduğundan emin olmanız gerekir .datetime
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()
Çıktı
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
Df'nin veri kümeniz olduğunu düşünürsek: new_df = df [df ['Değişken'] == 'A']. Yeniden örnekleme ('H'). Count ()
Şu şekilde yeni bir veri çerçevesi oluşturabilirsiniz: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})
Benzer şekilde, Değişken sütununun her kategorisi için sayımı alın ve döngüyü kullanarak final_df ile birleştirmeye çalışın.
Denemedim ama umarım işe yarar.