Replace rows in a Pandas df with rows from another df

前端 未结 2 425
一生所求
一生所求 2020-12-11 19:10

I have 2 Pandas dfs, A and B. Both have 10 columns and the index \'ID\'. Where the IDs of A and B match, I want to replace the rows of B with the rows of A. I have tried to

2条回答
  •  隐瞒了意图╮
    2020-12-11 20:01

    below code should do the trick

    s1 = pd.Series([5, 1, 'a'])
    s2 = pd.Series([6, 2, 'b'])
    s3 = pd.Series([7, 3, 'd'])
    s4 = pd.Series([8, 4, 'e'])
    s5 = pd.Series([9, 5, 'f'])
    
    
    
    df1 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)],  columns =  ["A", "B", "C"])
    
    s1 = pd.Series([5, 6, 'p'])
    s2 = pd.Series([6, 7, 'q'])
    s3 = pd.Series([7, 8, 'r'])
    s4 = pd.Series([8, 9, 's'])
    s5 = pd.Series([9, 10, 't'])
    
    df2 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)],  columns =  ["A", "B", "C"])
    
    df1.loc[df1.A.isin(df2.A), ['B', 'C']] = df2[['B', 'C']]
    print df1
    

    output

       A   B  C
    0  5   6  p
    1  6   7  q
    2  7   8  r
    3  8   9  s
    4  9  10  t
    

    Edit from comments:

    To replace the whole row instead of only some columns:

    cols = list(df1.columns) 
    df1.loc[df1.A.isin(df2.A), cols] = df2[cols]
    

提交回复
热议问题