使用熊猫合并更新表中的值(如果存在于其他表中)



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

表 p:

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

表 q:

A    B   C 
1   34   46   59
2   59   55   49 

我想根据"A"和"B"列合并这两个表,这样如果表 p 中的"A"、"B"值在表 q 中不存在,则表 p 中 B 列中的值是相同的。

试:

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

期望输出:

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

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

您可以使用update

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

最新更新