【问题标题】:How to copy rows from one df to another with matching value如何将行从一个df复制到另一个具有匹配值的行
【发布时间】:2016-07-05 00:59:28
【问题描述】:

假设我有一个这样的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?

我想要的 df 是:

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

我是 python 和 pandas 的新手,我仍然不知道如何去做。

谢谢。

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:
    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)
    

    【讨论】:

    • 谢谢你,这对我有用,但我发现 shivsn 回答对我来说更方便,所以我不得不把它给他。感谢您的帮助,我会记住您的回答。
    【解决方案2】:

    使用 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                
    

    【讨论】:

    • 这正是我所需要的。这很简单,但我还在学习。谢谢。
    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多