0
votes

Soustraire la liste précédente de la liste actuelle dans une liste des listes en boucle

J'ai une liste de dataframes avec des données de duplication de données dans chaque fichier de données suivant de la liste que je dois soustraire entre eux

the_list [0] = [1, 2, 3] the_list [1] = [1, 2, 3, 4, 5, 6, 7]

Il y a aussi des en-têtes DF. Les données de données ne sont que différentes en nombre de lignes.

solution souhaitée:

the_list [0] = [1, 2, 3] the_list [1] = [4, 5, 6, 7]

en raison du fait que ma liste de listes, the_list contient plusieurs dataframes, j'ai travailler en arrière et aller du dernier DF à d'abord avec d'abord intacts restants.

Mon code actuel (estwin est the_list): xxx

actuellement, le Le résultat est une liste vide. J'ai besoin d'un Mise à jour de la liste qui contient uniquement les différences (aucune valeur en double entre les listes).


0 commentaires

3 Réponses :


0
votes

one-liner: xxx


1 commentaires

Merci pour ce code Snippet, qui pourrait fournir une aide limitée et immédiate. Un Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi c'est une bonne solution au problème et le rendrait plus utile aux futurs lecteurs avec d'autres questions similaires. S'il vous plaît Modifier Votre réponse Pour ajouter une explication, y compris les hypothèses que vous avez apportées. Vous supposez: la commande n'est pas importante, les doublons ne sont pas importants (même s'ils ne sont pas supprimés) - etc. - NOIHHING dans le poste d'origine conduit à ces hypothèses.



1
votes

Votre code n'est pas exécutable, mais si je suppose que ce que vous vouliez écrire, cela fonctionne, sauf que vous avez un bogue dans votre algorithme:

[[1, 2, 3], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7, 8, 9]]
[[1, 2, 3], [4, 5, 6, 7], [8, 9]]


1 commentaires

Ce serait bien de voir les commentaires imprimés;).



1
votes

Vous n'avez pas besoin d'aller en arrière pour ce problème, il est plus facile de garder une trace de ce que vous avez déjà vu à l'avenir.
Gardez un ensemble qui est mis à jour avec de nouveaux éléments lorsque vous parcourez chaque liste et utilisez-le pour filtrer les éléments qui doivent être présents dans la sortie.

list1 = [1,2,3]
list2 = [1,2,3,4,5,6,7]
estwin = [list1, list2]
lookup = set() #to check which items/numbers have already been seen.
output = []
for lst in estwin:
    updated_lst = [i for i in lst if i not in lookup] #only new items present
    lookup.update(updated_lst)
    output.append(updated_lst)  
print(output) #[[1, 2, 3], [4, 5, 6, 7]]


9 commentaires

Cela fonctionnera, mais j'ai des en-têtes de colonne dans des listes dans la liste. La sortie n'est en quelque sorte que les en-têtes.


hmm, étrange. Quelle forme et quel type de données sont les articles de votre véritable "the_list" dans? Pouvez-vous montrer un extrait de celui-ci? @ r357


Spécifiquement, êtes-vous vraiment sûr de travailler avec des listes?


Je suis désolé, je suis un peu emporté pendant l'écriture du post. J'ai en fait avoir des données de données dans la liste.


Ah, je vois que je vois. Permettez-moi de demander à quelqu'un et d'essayer de comprendre s'il serait préférable de poster la question sur les données de Dataframes comme une question distincte ou de modifier celui-ci tel quel. Je ne suis pas sûr de quelle approche est appropriée ici. Avec des dataframes spécifiquement cependant, que cherchez-vous à «éviter la duplication» pour ainsi dire? Est-ce que cumule les noms de colonne, des lignes ou de tels autres? @ r357


J'ai un DF peuplé de valeurs et une colonne factice. Chaque fois que le mannequin est 1, j'ai divisé le Dataframe en (pseudo) DF [: Dummy = 1-N pour chaque mannequin = 1] avec N étant le nombre de rangées avant le mannequin. J'ai besoin de ces tranches afin de continuer, mais ces tranches sont actuellement toutes de 0 à la mannequin, ce qui va bien si je retire de la prochaine tranche de DF tout ce qui est déjà inclus dans la tranche de DF précédente.


Attendez, alors ne devrait-il pas suffire la longueur? @ R357 La longueur du 2e dernier Dataframe IIUC serait l'endroit où le dernier Dataframe "commence" à avoir de nouvelles lignes.


En fait, ce serait. Mais j'ai cette ligne qui divise le DF en morceaux: Estwin = [Estwin.iloc [0: I-N] pour I in IDX] Où IDX est une liste d'indices où mannequin = 1. Comment puis-je envelopper cela dans une boucle afin que je puisse faire df [len (précédent_df): i-n]?


À ce stade, je ne suis probablement pas simplement inquiet que vous pourriez descendre un trou de lapin que vous ne voudriez pas entrer dans la première place. Split le DF vraiment le bon appel en premier lieu? Vous voudrez peut-être simplement réfléchir à des étapes qui vous ont forcé à scinder le DF et à voir si vous pouviez les faire mieux. Cela pourrait être un XY Problème