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! P>
maintenant j'utilise maintenant cela avec un mot-clé statique: p> échantillon: p> Entrée: p> sortie: p> Toute aide beaucoup appréciée! P> P>
3 Réponses :
>>> 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)
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') code>. 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.
Une autre méthode impliquant df .dot () code>
Nice, Anky. J'ai pensé à dot code>, mais j'ai oublié complètement la façon d'ajouter ',' code> à celui-ci. +1
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
Certains échantillons de données seraient utiles pour bien comprendre le problème.
J'ai ajouté des échantillons de données