如果使用pandas merge在其他表中更新表中的值

时间:2018-10-18 13:57:54

标签: pandas merge

我有2个表,表p和表q。表p的内容将从表q更新。

表p:

<dict>

  <key>keyone</key>

  <string>valuekeyone</string>

  <key>keytwo</key>

  <string>valuekeytwo</string>

</dict>

表q:

     A    B    C
1   45   22   25
2   34   46   56
3   59   55   44

我想基于列“ A”和“ B”合并这两个表,以便如果表q中不存在表p中的“ A”,“ B”的值,则表p中B列中的值是一样。

尝试:

     A    B   C 
1   34   46   59
2   59   55   49 

输出:

p['A'] = pd.merge(q, on=['A','B'], how='left')['C']

所需的输出:

     A    B    C
1   45    22  NaN   
2   34    46   59 
3   59    55   49

我可以创建一个不同的列并合并,然后合并回表p的列“ A”,但这似乎很长。有更直接的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用keycol=['A','B'] df1=df1.set_index(keycol) df1.update(df2.set_index(keycol)) df1 Out[762]: C A B 45 22 25.0 34 46 59.0 59 55 49.0 df1.reset_index() Out[763]: A B C 0 45 22 25.0 1 34 46 59.0 2 59 55 49.0

map

df1.A.map(df2.set_index('A').B).fillna(df1.B) Out[727]: 1 22.0 2 59.0 3 99.0 Name: A, dtype: float64

的另一种解决方案
Alt + <Left Click>