如何将行从一个df复制到另一个具有匹配值的行

时间:2016-07-05 00:59:29

标签: python pandas merge

假设我有一个这样的df:

    A      B
0  John   131234
1  Sam    3454
2  Mandy  6521
3  Frank  134536

另一个df:

    X      Y       Z
0  Erick  Green   Pencil
1  Sam    Red     Phone
2  David  Orange  PC
3  Mandy  Blue    Notebook

如何将行和列从一个df复制到另一个具有匹配值的行?

我希望的df是:

    A      B        Y       Z
0  John   131234
1  Sam    3454     Red     Phone
2  Mandy  6521     Blue    Notebook
3  Frank  134536

我是python和pandas的新手,我仍然不知道这么做。

感谢。

2 个答案:

答案 0 :(得分:0)

import pandas as pd
import numpy as np

df0 = pd.DataFrame(np.array([
        ('John', 131234),
        ('Sam', 3454),
        ('Mandy', 6521),
        ('Frank', 134536)
    ]),
    columns=['A', 'B']
)

df1 = pd.DataFrame(np.array([
        ('Erick',  'Green',   'Pencil'),
        ('Sam',    'Red',     'Phone'),
        ('David', 'Orange',  'PC'),
        ('Mandy',  'Blue',    'Notebook')
    ]),
    columns=['X', 'Y', 'Z']
)

# join the two dataframes on the 'name'
#   left join into preserve all rows in 'df0'
df = pd.merge(df0, df1, left_on='A', right_on='X', how='left')

# drop the duplicate name column
df.drop('X', axis=1)

答案 1 :(得分:0)

使用pandas merge加入:

df
Out[24]: 
       A       B
0   John  131234
1    Sam    3454
2  Mandy    6521
3  Frank  134536

df1
Out[25]: 
       X       Y         Z
0  Erick   Green    Pencil
1    Sam     Red     Phone
2  David  Orange        PC
3  Mandy    Blue  Notebook

    df.merge(df1,left_on='A',right_on='X',how='left').drop('X',1).fillna('')
Out[26]: 
       A       B     Y         Z
0   John  131234                
1    Sam    3454   Red     Phone
2  Mandy    6521  Blue  Notebook
3  Frank  134536