Étant donné un panda timeseries dataframe regroupés par « UET »timeseries de GroupBy remplir les données manquantes avec 0
df
Out[64]:
UUT Sum
Date_Time
2017-04-28 18:48:16 uut-01 2
2017-04-28 18:48:18 uut-02 2
2017-04-28 18:48:19 uut-03 2
Je veux utiliser réindexation pour créer une série chronologique en 1 seconde d'intervalle, et combler les lacunes avec valeur 0 pour la colonne Somme uniquement, semblable à ce qui montre ci-dessous:
df
Out[64]:
UUT Sum
Date_Time
2017-04-28 18:48:16 uut-01 2
2017-04-28 18:48:16 uut-02 0
2017-04-28 18:48:16 uut-03 0
2017-04-28 18:48:17 uut-01 2
2017-04-28 18:48:17 uut-02 0
2017-04-28 18:48:17 uut-03 0
2017-04-28 18:48:18 uut-01 0
2017-04-28 18:48:18 uut-02 2
2017-04-28 18:48:18 uut-03 0
2017-04-28 18:48:19 uut-01 0
2017-04-28 18:48:19 uut-02 0
2017-04-28 18:48:19 uut-03 2
je réindexation, mais ils remplirent les deux « UET » et « Somme » avec des zéros. Comment remplir l'horodatage manquant pour la colonne UUT avec des noms de uut au lieu de zéros, et remplir des zéros à la colonne 'Sum' uniquement?
idx = pd.date_range('2017-04-28 18:48:16', '2017-04-28 18:48:19', freq='1s')
grouped = df.groupby('UUT')
grouped.get_group('uut-01').reindex(idx, fill_value=0)
grouped.get_group('uut-01')
2017-04-28 18:48:16 uut-01 2
2017-04-28 18:48:17 0 0
2017-04-28 18:48:18 0 0
2017-04-28 18:48:19 0 0
Sur la base de la réponse de Kyle, je l'ai eu à travailler enfin:
df = df.set_index([df.index, 'UUT'])
idx = pd.MultiIndex.from_product(df.index.levels, names=['Date_Time', 'UUT'])
df = df.reindex(index=idx, fill_value=0)
df.reset_index(level=[1]) #convert back to single index
grouped = df.groupby('UUT')
Il est préférable de fournir les données avant de 'groupby' – Wen
J'ai essayé de réindexer avant groupby, il remplit tous colonnes avec des zéros. Je pensais en faisant un groupby en premier, il traiterait chaque nom UUT comme en-tête secondaire et l'ignorerait juste – user97662