Je voudrais remplir la valeur manquante dans 2 colonnes. Il y a Date et Cat2 doivent être remplis avec la valeur d'une autre ligne en fonction de la dernière date pour Cat1 prédéfinie (prédéfinie dans les lignes remplies précédentes), par exemple:
Exemple de données:
Day Date Cat1 Cat2 1 31/12/17 cat mouse 2 01/09/18 cat mouse 3 27/05/18 dog elephant 4 01/09/18 cat mouse 5 01/09/18 cat mouse
3 Réponses :
Je pense que vous avez besoin de GroupBy.ffill avec DataFrame.reindex pour la même commande que l'original DataFrame:
df = df.groupby('Cat1').ffill().reindex(df.columns, axis=1)
print (df)
Day Date Cat1 Cat2
0 1 31/12/17 cat mouse
1 2 01/09/18 cat mouse
2 3 27/05/18 dog elephant
3 4 01/09/18 cat mouse
4 5 01/09/18 cat mouse
Merci pour votre réponse rapide. La colonne Date est correctement remplie par la dernière date pour Cat1 , mais la colonne Cat2 a été remplie sans condition pour Cat1 (< code> éléphant à la place de souris ).
@@ Jezrael, vous avez raison. Je comprends où est mon problème. Avant d'exécuter les suggestions df.groupby ('Cat1'). Ffill (). Reindex (df.columns, axis = 1) , j'exécute sort_values comme: data.sort_values (by = ['Date'], inplace = True, ascending = True) . Donc, je suppose que c'est pourquoi il y avait un problème. Merci beaucoup.
@Cindy - Merci, ravie de vous aider. N'oubliez pas d'accepter la réponse, si cela vous convient! :)
De plus, une alternative est:
data = data.groupby(['Cat1'], as_index = False).apply(lambda group: group.ffill())
Merci, @Jezrael pour l'idée de la solution :)
Vous pouvez utiliser un dict:
dict = df[['cat','cat2']].drop_duplicates(keep='first', inplace=False).to_dict() df['cat2'] = df['cat1'].replace(dict)
pour la colonne de séries temporelles que vous pouvez utiliser timedelta (extrapolation linéaire). bonne chance!