2017-08-14 3 views
2

Si j'ai plusieurs pandas dataframes qui ressemblent à ceci:Comment utiliser plusieurs comparer dataframes et retourner les matchs en utilisant Pandas

Name  Score 
Sam  4 
Aaron  5 
Neil  6 
Ben  7 

Name  Score 
Morgan  5 
Neil  6 
Adam  8 
Ben  5 

Name  Score 
Evan  5 
Nathan  4 
Neil  6 
Ben  2 

Comment puis-je utiliser pandas.concat (rejoindre) à se joindre à tous les dataframes en un grand et ensuite seulement retourner les noms qui se trouvent dans les trois dataframes?

Résultats escomptés:

Name 
Neil 
Ben 

Répondre

4

Si vous êtes intéressé seulement les noms, vous pouvez obtenir intersection comme celui-ci

pd.Series(list(set(df1.Name) & set(df2.Name) & set(df3.Name))) 

0 Neil 
1  Ben 
3

Vous pouvez utiliser pd.concat avec le paramètre join='inner'

pd.concat([d1, d2, d3], axis=1, join='inner') 

     Score Score Score 
Name      
Neil  6  6  6 
Ben  7  5  2 

Si vous avez besoin de différencier les colonnes, vous pouvez passer un paramètre keys

pd.concat(
    [d.Score for d in [d1, d2, d3]], 
    axis=1, join='inner', keys=['d1', 'd2', 'd3'] 
) 

     d1 d2 d3 
Name    
Neil 6 6 6 
Ben 7 5 2 
+0

Très belle, comme toujours! – Vaishali