Python: décompte des heures glissantes des variables catégorielles
J'ai un dataframe pandas avec des colonnes ['DateTime', 'Variable'], et j'essaie d'obtenir un décompte glissant dans la dernière heure pour chacun Variable. Le pivot de pensée pourrait être utilisé d'une manière ou d'une autre.
Exemple de données
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
Production attendue
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
De nouvelles variables peuvent être ajoutées ou supprimées, j'aimerais donc avoir une solution dynamique.
Réponses
Vous pourriez en fait commencer par pivot, ou le faire à la main avec groupby.unstack.
Ensuite, vous cherchez df.rollingà créer des fenêtres déroulantes qui peuvent être agrégées avec de nombreuses fonctions. Pour que les fenêtres soient créées avec un temporisateur (1 heure dans ce cas), vous devez vous assurer que l'index est de datetimetype.
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()
Production
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
Considérant que df est votre ensemble de données: new_df = df [df ['Variable'] == 'A']. Resample ('H'). Count ()
Vous pouvez créer un nouveau dataframe comme suit: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})
De même, prenez le décompte de chaque catégorie de la colonne Variable et essayez de le concater avec la boucle final_df using.
Je ne l'ai pas essayé mais j'espère que cela fonctionnerait.