Python: kategorik değişkenlerin hareketli saat sayısı

Oct 04 2020

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

RichieV Oct 04 2020 at 02:47

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

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.