J'ai 2 Dataframes Pandas avec 5 colonnes et environ 1000 lignes chacune (travaillant avec python3).
Je suis intéressé à faire une comparaison entre la première colonne de df1
et la première colonne de df2
comme suit:
def check_presence(df1_col1, second_csv): for index, row in second_csv.iterrows(): search_string = "(?P<first_group>^(" + some_string + "))(?P<the_rest>" + row["col1"] + "$)" if re.search(search_string, df1_col1): return True return False
DF1 [index] [col1] 2 "acksyn" 3 "foobaz" ... ...
3 Réponses :
Vous devrez d'abord joindre
vos mots clés dans df2
si vous souhaitez utiliser la méthode str.contains
.
import pandas as pd df = pd.DataFrame({'col1': {0: 'foobar', 1: 'acksyn', 2: 'foobaz', 3: 'ackfin'}}) df2 = pd.DataFrame({'col1': {0: 'old', 1: 'fin', 2: 'new', 3: 'bar'}}) print (df["col1"].str.contains("|".join(df2["col1"]))) # 0 True 1 False 2 False 3 True
Prenez vos montures
frame1["col2"]=frame1["col1"].str.contains(pattern) frame1.loc[frame1["col2"]==True] col1 col2 0 foobar True 3 ackfin True
Puis
myList=frame2.col2.values pattern='|'.join(myList)
Enfin
frame1 =frame1=pd.DataFrame({"col1":["foobar","acksyn","foobaz","ackfin"]}) frame2=pd.DataFrame({"col1":["old","fin","new","bar"]})
"" pour chaque ligne de DF1, si DF1.col1 se termine par une valeur de DF2.col1, supprimez la ligne. ""
# Search for Substring # Generate an "OR" statement with a join # Drop if match. df[~df.col1.str.contains('|'.join(df2.col1.values))]
Cela ne conservera que les lignes où DF2.Col1 est PAS strong> trouvé dans DF1.Col1.
Cela pourrait-il devenir quelque chose comme: df [~ df1.col1.str.contains ("$ |" .join (df2.col1.str) + "$", regex = True, na = False)] code >? Les chaînes DF1 doivent se terminer par l'un des DF2 pour être supprimées
Vous pourriez s'il y a une valeur de filtrage supplémentaire en le faisant
"" pour chaque ligne de DF1, si DF1.col1 se termine par une valeur de DF2.col1, supprimez la ligne. "" Connaissez-vous le nombre de valeurs que DF1.col1 correspond à DF2.col1? Est-ce juste les 3 dernières valeurs de DF1.col1 que vous correspondez à DF2.col1?
Non, je ne connais pas le nombre exact de chacun. La correspondance doit être avec les valeurs DF2.col1 entières, pas les trois dernières. C'était un exemple
Pas de problème - j'ai ajouté un one-liner qui devrait répondre à vos besoins.