GOOGLE ADS

samedi 23 avril 2022

Comment découper une trame de données avec compréhension de liste en utilisant une condition qui compare deux lignes consécutives

J'ai une dataframe:

dfx = pd.DataFrame()
dfx['Exercise'] = ['squats', 'squats', 'rest', 'rest', 'squats', 'squats', 'rest', 'situps']
dfx['Score'] = [8, 7, 6, 5, 4, 3, 2, 1]

En utilisant une compréhension de liste (ou toute autre technique autre que la boucle), je souhaite créer une liste list_excontenant les tranches de dfx dans lesquelles l'exercice consécutif est le même que l'exercice en cours. Dès que l'exercice consécutif n'est pas le même que celui de la ligne actuelle, la tranche de trame de données suivante commence.

En ce qui concerne l'exemple, cela signifie qu'il list_exdoit contenir 5 dataframes :


  • Le premier df contient deux lignes : ('squats', 8) et ('squats', 7)

  • Le deuxième df contient deux lignes : ('rest', 6) et ('rest', 5)

  • Le troisième df contient deux lignes : ('squats', 4) et ('squats', 3)

  • Le quatrième df contient une ligne : ('rest', 2)

  • Le cinquième df contient une ligne : ('situps', 1) Chaque dataframe doit avoir le même en-tête que dfx.


Désolé d'avoir expliqué cela de cette manière. Je n'ai pas été en mesure de produire du code pour la liste souhaitée de dataframes.

J'ai essayé d'utiliser une compréhension de liste mais j'ai échoué en ce qui concerne l'inclusion de la comparaison de la ligne actuelle et consécutive. Comment puis-je atteindre le résultat souhaité?


Solution du problème

c'est ce que tu veux?

group = dfx['Exercise'].ne(dfx['Exercise'].shift()).cumsum()
list_ex = [g for _,g in dfx.groupby(group)]

production:

[ Exercise Score
0 squats 8
1 squats 7,
Exercise Score
2 rest 6
3 rest 5,
Exercise Score
4 squats 4
5 squats 3,
Exercise Score
6 rest 2,
Exercise Score
7 situps 1]

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...