0
votes

Vérifiez si la chaîne dans une colonne est contenue dans la chaîne d'une autre colonne de la même ligne et ajoutez une nouvelle colonne avec nom de colonne correspondant.

En plus de ma question précédente Rechercher une valeur dans toutes les colonnes de Dataframe (à l'exception de la première colonne!) et ajoutez une nouvelle colonne avec nom de colonne correspondant (où j'ai utilisé un mot-clé statique)

Je voudrais vérifier si la chaîne Dans la première colonne est contenue dans l'une des autres colonnes de la même ligne, puis ajoutez une nouvelle colonne avec le (s) nom de colonne correspondant. Tous les noms de colonnes de toutes les valeurs appariées!

maintenant j'utilise maintenant cela avec un mot-clé statique: xxx

échantillon:

Entrée: xxx

sortie: xxx

Toute aide beaucoup appréciée!


2 commentaires

Certains échantillons de données seraient utiles pour bien comprendre le problème.


J'ai ajouté des échantillons de données


3 Réponses :


1
votes
>>> def get_columns(x):
...     y = x.iloc[1:]
...     return y.index[y.str.contains(str(x['to_find']))]
... 
>>> df['found_in'] = df.apply(lambda x: ' '.join(get_columns(x)), axis=1)

1 commentaires

Je reçois une erreur sur votre code: TypeError: ('Premier argument doit être une chaîne ou un motif compilé "," s'est produite à l'index 0') . Je l'ai changé à `retour Y.index [y.str.Contains (Str (x [" Search_term ']), na = false, flags = re.ignorecase)] `Et maintenant ça a l'air bien.



2
votes

Une autre méthode impliquant df .dot () xxx


xxx

1 commentaires

Nice, Anky. J'ai pensé à dot , mais j'ai oublié complètement la façon d'ajouter ',' à celui-ci. +1



2
votes

Premier, Appliquer code> pour obtenir le fichier de données booléen. Ensuite, en utilisant masque code> pour attribuer des noms de colonne à VALEUR code>, remplacer false code> sur NAN code> et AGG Inscrivez-vous sur Drowna code> Série:

df1 = df.astype(str).apply(lambda x: x[1:].str.contains(x.key), axis=1)
df['match'] = df1.mask(df1, df1.columns[None,:]).replace(False,np.nan) \
                 .agg(lambda x: ','.join(x.dropna()), axis=1)


Out[41]:
   key col_B  col_C col_D  col_E        match
0  123  abcd  12345  fght   7890        col_C
1  567  tdfe   6353  0567  56789  col_D,col_E


0 commentaires