2017-08-24 2 views
2

Je m'essaie à des filtres de spame. J'ai essayé plusieurs méthodes pour étiqueter les fichiers texte comme spam. En conséquence, j'ai trois dataframes. Ils regardent essentiellement comme ceci:Comparez les données Panda et vérifiez les chevauchements?

df_method_1 = pd.DataFrame({'file': ['A','B' ,'C'], 'spam': ['1', '0', '0']}) 
df_method_2 = pd.DataFrame({'file': ['A','B' ,'C'], 'spam': ['1', '1', '0']}) 
df_method_3 = pd.DataFrame({'file': ['A','B' ,'C'], 'spam': ['1', '1', '0']}) 

J'essaie maintenant creat une projection de dataframe, si un fichier a été labled comme spam et le cas échéant par la méthode qui.

Dans le meilleur des cas, je peux créer une trame de données contenant les infortmation suivantes:

df_summary = pd.DataFrame({'file': ['A','B' ,'C'], 'spam': ['All methods', 'Method 2 & Method 3', 'No method']}) 

De toute évidence, je suis à la recherche de l'information. Pas besoin de les chaînes réelles. J'ai essayé pandas.DataFrame.isin() pour que cela se produise. Mais j'ai échoué. Des idees pour faire cela?

Répondre

1

Que diriez-vous de merge()?

df1.merge(df2, on="file").merge(df3, on="file") 
    file spam_x spam_y spam 
0 A  1  1 1 
1 B  0  1 1 
2 C  0  0 0