Python 3.x 使用另一个数据帧的值更新数据帧的正确方法

Python 3.x 使用另一个数据帧的值更新数据帧的正确方法,python-3.x,pandas,Python 3.x,Pandas,使用另一个数据帧中的值更新一个数据帧中的多个列的正确方法是什么 假设我有两个数据帧: import pandas as pd df1 = pd.DataFrame([['4', 'val1', 'val2.4', 'val3.4'], ['5', 'val1', 'val2.5', 'val3.5'], ['6', 'val1', 'val2.6', 'val3.6'], [

使用另一个数据帧中的值更新一个数据帧中的多个列的正确方法是什么

假设我有两个数据帧:

import pandas as pd

df1 = pd.DataFrame([['4', 'val1', 'val2.4', 'val3.4'],
                    ['5', 'val1', 'val2.5', 'val3.5'],
                    ['6', 'val1', 'val2.6', 'val3.6'],
                    ['7', 'val1', 'val2.7', 'val3.7']],
                   columns=['account_id', 'field1', 'field2', 'field3'])

df2 = pd.DataFrame([['6', 'VAL2.6', 'VAL3.6'],
                    ['5', 'VAL2.5', 'VAL3.5']],
                   columns=['account_id', 'field2', 'field3'])
值得注意的是,df2只有d1行(以某种随机顺序)和列的子集

我想用df2中的值替换df1中的值(如果存在,则根据帐户id加入,并进行SQL更新)

一种解决办法是

cols_to_update = ['field2', 'field3']
df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2[cols_to_update].values
但这并不能处理连接并导致

    account_id    field1    field2    field3
0   4             val1      val2.4    val3.4
1   5             val1      VAL2.6    VAL3.6
2   6             val1      VAL2.5    VAL3.5
3   7             val1      val2.7    val3.7
其中帐户_id 6现在具有错误的值

我的问题是:

  • 我如何使用索引来实现类似的功能

  • 有没有合并重复列的merge()或join()解决方案不那么繁琐


  • 分配前对
    df2
    的值进行排序,即

    cols_to_update = ['field2', 'field3']
    
    df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2.sort_values(['account_id'])[cols_to_update].values
    
       account_id field1  field2  field3
    0          4   val1  val2.4  val3.4
    1          5   val1  VAL2.5  VAL3.5
    2          6   val1  VAL2.6  VAL3.6
    3          7   val1  val2.7  val3.7
    

    我建议您使用熊猫数据框的功能:

    df = pd.DataFrame({'A': [1, 2, 3],'B': [400, 500, 600]})
    new_df = pd.DataFrame({'B': [4, 5, 6],'C': [7, 8, 9]})
    df.update(new_df)
    df
       A  B
    0  1  4
    1  2  5
    2  3  6
    

    非常感谢。我对两个数据帧进行了排序,以确保关键顺序与我假设的一样。