0
votes

Comment appliquer un filtre Pandas sur un cadre de données en fonction des entrées dans une colonne à partir d'une image de données différente (pas de join)

Par exemple, j'ai une trame de données (DF_1) avec une colonne contenant des données texte. La deuxième trame de données (DF_2) contient des nombres. Comment puis-je vérifier si le texte contient les chiffres de la deuxième trame de données?

df_1 xxx

df_2 xxx

donc je veux vérifier si les entrées de [note] de df_1 contiennent les entrées de [code_number] de df_2

J'ai essayé d'utiliser le Code suivant: df_1 [df_1 ['Remarque']. ​​str.contains (df_2 ['Code_Number'])] Et je sais que je ne peux pas utiliser de rejoindre car je n'ai pas de clé pour vous connecter.

Le résultat final que je recherche après que le filtrage a été appliqué est: xxx


0 commentaires

3 Réponses :


1
votes

Faites ceci:

df_1.loc[df_1['Note'].apply(lambda x: any(str(number) in x for number in df_2['Code_Number']))]


2 commentaires

J'ai donc: df_i = df_1.loc [df_1 ['Remarque']. ​​Appliquer (Lambda X: Any (STR (numéro (numéro) dans x pour le numéro dans df_2 ['code_number'])) < Code> retour df_i mais quand j'exécute cela, il est indiqué "Syntaxe invalide"


Désolé, il y avait eu une faute de frappe, @sammywemmy a fixé. Devrait courir maintenant.



1
votes

Essayez ceci et voyez s'il couvre votre cas d'utilisation: obtenez un cartésien transversien des deux colonnes, en utilisant iTERTOOLS 'Product et filtrer en fonction de la condition:

from itertools import product
m = [ left for left, right
      in product(df.Note,df1.Code_Number) 
      if str(right) in left]

pd.DataFrame(m,columns=['Note'])

               Note
0   The code to this is 1003


0 commentaires

0
votes
Firstly, you have to create 1 column in your df1 where the notes are with a list of numbers that are present in the Notes and then Compare the List column of numbers with the List column of the df2 where the numbers are present(both should be in list format)



#Extract Numbers from Notes
a_string = "0abcadda1 11 def 23 10007"

numbers = [int(word) for word in a_string.split() if word.isdigit()]

print(numbers)


list_test = "103,23"

#Finding common element from both lists the list
L1 = [2,3,4]
L2 = [1,2]
[i for i in L1 if i in L2]


S1 = set(L1)
S2 = set(L2)
print(S1.intersection(S2))

#If you want to find out the common element

def common_data(list1, list2):
    result = False

    # traverse in the 1st list 
    for x in list1:

        # traverse in the 2nd list 
        for y in list2:

            # if one common 
            if x == y:
                result = True
                return result

    return result


# driver code 

a = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(common_data(a, b))

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9]
print(common_data(a, b)) 

0 commentaires