Disons que nous avons un dataframe d'exemple comme ci-dessous,
df = pd.DataFrame(np.array([['strawberry', 'red', 3], ['apple', 'red', 6], ['apple', 'red', 5],
['banana', 'yellow', 9], ['pineapple', 'yellow', 5], ['pineapple', 'yellow', 7],
['apple', 'green', 2],['apple', 'green', 6], ['kiwi', 'green', 6]
]),
columns=['Fruit', 'Color', 'Quantity'])
df
Fruit Color Quantity
0 strawberry red 3
1 apple red 6
2 apple red 5
3 banana yellow 9
4 pineapple yellow 5
5 pineapple yellow 7
6 apple green 2
7 apple green 6
8 kiwi green 6
Dans ce df, je vérifie s'il y a un changement dans la colonne Fruit ligne par ligne.
Avec la méthode shift(), les lignes sont décalées de 1, avec la méthode fillna(), les valeurs NaN sont remplies et enfin avec la méthode ne(), un étiquetage True-Faux est effectué.
Donc comme vous pouvez le vérifier à partir de l'index 1, la fraise change en pomme, cela donnera "True". À l'index 2, il n'y a aucun changement, cela donnera "False".
df['Fruit_Check'] = df.Fruit.shift().fillna(df.Fruit).ne(df.Fruit)
df
Fruit Color Quantity Fruit_Check
0 strawberry red 3 False
1 apple red 6 True
2 apple red 5 False
3 banana yellow 9 True
4 pineapple yellow 5 True
5 pineapple yellow 7 False
6 apple green 2 True
7 apple green 6 False
8 kiwi green 6 True
Mon problème est le suivant: je veux également vérifier la colonne "Color". Si un changement s'y trouve, la colonne Fruit_Check doit être par défaut False. Ainsi, le df devrait ressembler à ceci,
df
Fruit Color Quantity Fruit_Check
0 strawberry red 3 False
1 apple red 6 True
2 apple red 5 False
3 banana yellow 9 False
4 pineapple yellow 5 True
5 pineapple yellow 7 False
6 apple green 2 False
7 apple green 6 False
8 kiwi green 6 True
Je ne devrais pas non plus utiliser de boucle for. Parce que lorsque je l'utilise avec mes données d'origine, cela prend trop de temps.