代码之家  ›  专栏  ›  技术社区  ›  David

用另一个值更新熊猫数据帧的正确方法

  •  1
  • David  · 技术社区  · 8 年前

    假设我有这两个数据帧:

    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'])
    

    一个解决方案是

    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
    

    其中,account_id 6现在的值错误。

    1. 如何使用索引使类似的东西工作?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Bharath M Shetty    8 年前

    排序的值 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