擅长:python、mysql、java
<p>第一个“幼稚”解决方案:</p>
<pre><code>d3 = pd.merge(d1,d2, left_on = ["name","date","category"], right_on = ["name","date","category"])
d3 = d3.assign(A = d3.A_x + d3.A_y, B = d3.B_x + d3.B_y, ).drop(columns=["A_y","A_x","B_y","B_x"])
</code></pre>
<p>更好的解决方案,无需手动添加列:</p>
<pre><code>key = ["name","date","category"]
d3 = pd.merge(d1,d2, left_on = key, right_on = key)[key]
d4 = pd.concat([d1, d2]).groupby(by=key).sum()
d5 = pd.merge(d3,d4,right_on = key, left_on = key)
</code></pre>
<p>结果:</p>
<pre><code> name date category A B
0 W 1/1/2020 home 3 3
1 W 1/2/2020 home 2 2
2 Y 1/3/2020 garden 2 2
</code></pre>
<p>使用<code>pd.merge</code>可以指定组合键<code>["name","date","category"]</code>连接2个数据帧</p>