J'ai extrait des données au format pandas à partir d'un serveur sql. La structure comme ceci:Pandas: substitution par lots de valeurs de différentes lignes répondant aux mêmes critères
df = pd.DataFrame({'Day':(1,2,3,4,1,2,3,4),'State':('A','A','A','A','B','B','B','B'),'Direction':('N','S','N','S','N','S','N','S'),'values':(12,34,22,37,14,16,23,43)})
>>> df
Day Direction State values
0 1 N A 12
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
Maintenant, je veux remplacer toutes les valeurs avec le même jour et même direction, mais avec (Etat == A) par lui-même + les valeurs de même jour et même État, mais avec (Etat == B). Par exemple, comme ceci:
df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'] = df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'].values + df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'B'),'values'].values
>>> df
Day Direction State values
0 1 N A 26
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
Notez les premières valeurs de ligne ont été modifiées de 12 à 26 (12 + 14) Puisque les valeurs sont de différentes lignes, donc un peu difficile à utiliser des fonctions combine_first?
Maintenant, je dois utiliser deux boucles (sur 'Day' et sur 'Direction') et la phrase d'attribution ci-dessus à faire, c'est extrêmement lent quand la dataframe devient grande. Avez-vous un moyen intelligent et efficace de le faire?
oh, groupez et appliquez: charmant compagnon de funcs. En tant que débutant, soyez toujours impressionné par ce qu'ils peuvent faire, mais ils ont quand même besoin de plus de formation pour les maîtriser. Merci beaucoup, mec – lkonweb
Pas de soucis. Veuillez accepter la réponse si vous le trouvez utile. – Allen