2016-07-23 234 views
3

我有两个数据帧DF-1,DF-2这样的,比较常见的行大熊猫dataframes两个dataframes

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 

如何找到企业,区域和名称的DF-1中各行与df-2相同。换句话说,如何找到所有三列组合的内连接。

+0

你使用哪种列,以决定它们是否相同?公司,地区和名称?试试'df1.merge(df2)'。这不是你问的,但我觉得这是你想要的最终结果。 – ayhan

回答

2

这取决于你的

行的DF-1是一样的DF-2是什么意思。

因为列不相同。

如果你的意思是对列的交叉相同值的行,您可以执行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 

编辑

如果您想为连接列更大的控制权,您可以使用merge函数的onleft_onright_on参数。如果你不这样做,熊猫会认为你的意思是两个数据帧的交集。

0

结果= pd.merge(DF1,DF2,对= [ '公司', '区域', '区域'],如何= “左”)