0
votes

Pandas: Si la liste contient des éléments d'une autre liste (x), ajoutez l'élément de correspondance de x à une nouvelle colonne

J'ai un cadre de données qui ressemble à ce xxx

et une autre liste x = [g, t, r, c]

Je souhaite créer une nouvelle colonne col4 qui aura les éléments correspondant à partir de col3 avec la liste x.

après l'exécution du code, le La trame de données ressemblera à ceci: xxx

Voici ce que j'ai essayé: xxx

pour lequel je suis Obtenir cette erreur ValueError: la longueur des valeurs ne correspond pas à la longueur de l'index


4 commentaires

Col2 est-il pertinent pour la question?


Col3 contient également des listes ou des chaînes?


Col3 contient-il une liste? Comment? Ou est-ce juste une corde avec des lettres?


@ EPI272314 COL3 contient une liste de caractères de chaîne.


5 Réponses :


2
votes

Cette ligne devrait suffire à utiliser la compréhension de la liste:

df['col4'] = [ list(set(x) & set(df['col3'][i]) for i in range(len(df['col3']))]


0 commentaires

1
votes

Vous pouvez utiliser appliquer la méthode code> comme xxx pré>

s'il existe plusieurs correspondances, c'est également pris en charge P>

[ k pour k in y if k in x] code> est une méthode de compréhension de liste qui vous donne une liste d'éléments communs dans les deux x code> et y code> et Y code> Voici les éléments individuels de col3 code>. Si vous êtes sûr qu'il y a exactement une correspondance, vous pouvez faire P>

df['col4'] = df['col3'].apply(lambda y : [k for k in y if k in x][0])


0 commentaires

1
votes

Vous pouvez essayer xxx


0 commentaires

2
votes

Vous pouvez le faire dans une ligne comme si:

import pandas as pd


df = pd.DataFrame({"col1": [1, 2, 3],
                    "col2": ["ab", "rx", "pq"],
                    "col3": [['p','q','r','s'], ['t','u','v','w'], ['h','a','g','s']]})
x = {'g','t','r','c'}

df["col4"] = df["col3"].apply(lambda v: list(set(v).intersection(x)))
print(df)
#   col1 col2          col3 col4
#0     1   ab  [p, q, r, s]  [r]
#1     2   rx  [t, u, v, w]  [t]
#2     3   pq  [h, a, g, s]  [g]


0 commentaires

1
votes

Nous pouvons parcourir un cartésien de la colonne 3 et x pour obtenir les résultats. En outre, plus vite :) xxx


2 commentaires

Je reçois ValueError: la longueur des valeurs ne correspond pas la longueur de l'index


Je viens de modifier le code. Je viens de le courir à nouveau pour confirmer la sortie. qu'est-ce que vous obtenez pour sortie ? Ou vos données sont-elles plus de trois rangées, comme partagées ci-dessus?