2016-07-23 17 views
3

Ich habe zwei Datenrahmen DF-1 und df-2 wie diese,Vergleiche Pandas Datenrahmen für gemeinsame Reihen in zwei Datenrahmen

import pandas as pd 

raw_data = {'company': ['comp1', 'comp1', 'comp1', 'comp1', 'comp2', 'comp2', 'comp2', 'comp2', 'comp3', 'comp3', 'comp3', 'comp3'], 
     'region': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'], 
     'name': ['John', 'Jake', 'Alice', 'Mathew', 'Mark', 'Jacon', 'Ryan', 'Sone', 'Steve', 'Rooke', 'Rani', 'Alice'], 
     'preTestScore': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3], 
     'postTestScore': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]} 
df1 = pd.DataFrame(raw_data, columns = ['company', 'region', 'name', 'preTestScore']) 
print df1 


raw_data = {'company': [ 'comp1', 'comp1', 'comp2', 'comp2', 'comp2', 'comp2', 'comp3', 'comp3', 'comp3'], 
     'region': [ '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd'], 
     'name': [ 'Alice', 'Mathew', 'Mark', 'Jacon', 'Ryan', 'Sone', 'Steve', 'Rooke', 'Rani', ], 
     'status': [ 'great', 'average', 'average', 'average', 'good', 'great', 'average', 'average', 'average']} 
df2 = pd.DataFrame(raw_data, columns = ['company', 'region', 'name', 'status']) 
print df2 

Wie die Reihen der Unternehmen, die Region und Namen in df-1 zu finden, die ist gleich wie df-2. Mit anderen Worten, wie man den inneren Join mit der Kombination aller drei Spalten findet.

+0

Welche Spalten, die Sie verwenden entscheiden, ob sie das sind gleich? Firma, Region und Name? Versuchen Sie 'df1.merge (df2)'. Es ist nicht das, was du fragst, aber ich fühle, dass das das Endergebnis ist, das du willst. – ayhan

Antwort

2

Es hängt davon ab, was Sie mit

Reihen in df-1, die als df-2 gleich ist.

da die Spalten nicht identisch sind.

Wenn Sie Zeilen bedeuten, die denselben Wert für die Kreuzung von Spalten haben, können Sie führen eine inner join user merge:

In [13]: pd.merge(df1, df2, how='inner') 
Out[13]: 
    company region name preTestScore status 
0 comp1 2nd Alice   31 great 
1 comp1 2nd Mathew    2 average 
2 comp2 1st Mark    3 average 
3 comp2 1st Jacon    4 average 
4 comp2 2nd Ryan   24  good 
5 comp2 2nd Sone   31 great 
6 comp3 1st Steve    2 average 
7 comp3 1st Rooke    3 average 
8 comp3 2nd Rani    2 average 

bearbeiten

Wenn Sie eine größere Kontrolle für die Join-Spalten möchten Sie können die on oder left_on und right_on Parameter der merge Funktion verwenden. Wenn Sie dies nicht tun, nehmen Pandas an, dass Sie den Schnittpunkt der Spalten der beiden Datenrahmen meinen.

0

result = pd.merge (DF1, DF2, auf = [ 'Unternehmen', 'Region', 'Region'], wie = "left")

Verwandte Themen