2017-08-09 49 views
1

我想根据数据框中的公共列的值合并两个大熊猫数据帧。然而,在dataframes之一的列中的值不是唯一的:在具有非唯一元素的列上合并具有不同大小的大熊猫数据帧

df1 = pd.DataFrame(
{'SimId:': [1, 1, 1, 2, 2], 
'RunId': [1, 2, 3, 1, 2], 
'Velocity': [5, 6, 7, 8, 9]}) 

df2 = pd.DataFrame(
{'SimId': [1, 2], 
'weather': ['sun', 'snow']}) 

因此,我想获得这样的数据帧:

df3 = pd.DataFrame(
{'SimId:': [1, 1, 1, 2, 2], 
'RunId': [1, 2, 3, 1, 2], 
'Velocity': [5, 6, 7, 8, 9], 
'weather': ['sun', 'sun', 'sun', 'snow', 'snow']}) 

当试图合并这样的:

df3 = pd.merge(df1, df2, on='SimId', how='right') 

我得到一个“KeyError”。

任何人都可以帮助我解决这个问题的最pythonic方式?

回答

1
your code works as Andrey said just fix a typo in df1 
df1 = pd.DataFrame(
{'SimId': [1, 1, 1, 2, 2], 
'RunId': [1, 2, 3, 1, 2], 
'Velocity': [5, 6, 7, 8, 9]}) 

df2 = pd.DataFrame(
{'SimId': [1, 2], 
'weather': ['sun', 'snow']}) 

df3 = pd.merge(df1, df2, on='SimId', how='right') 
print (df3) 
    RunId SimId Velocity weather 
    # 0  1  1   5  sun 
    # 1  2  1   6  sun 
    # 2  3  1   7  sun 
    # 3  1  2   8 snow 
    # 4  2  2   9 snow 
2

你的代码的工作:

df3 = pd.merge(df1, df2, on='SimId', how='right') 

你只需要修复DF1一个错字:不是 'SIMID:',而是 'SIMID'。