我有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”,但这似乎很长。有更直接的方法吗?
答案 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>