擅长:python、mysql、java
<p>一种方法是使用类似SQL的数据库技术;将“self join”与<code>merge</code>一起使用。使用<code>left_on</code>和<code>right_on</code>将“Group”与“refGroup”对齐,然后从每个数据帧记录中减去值,将数据帧合并/加入到自身:</p>
<pre><code>df_out = df.merge(df,
left_on=['No','refGroup'],
right_on=['No','Group'],
suffixes=('','_ref'))
df['refValue'] = np.where(df_out['Group'] == df_out['refGroup'],
df_out['value'],
df_out['value'] - df_out['value_ref'])
df
</code></pre>
<p>输出:</p>
<pre><code> No Group refGroup value refValue
0 123 A1 A1 5.0 5.0
1 123 B1 A1 7.3 2.3
2 123 B2 A1 8.9 3.9
3 123 B3 B1 7.9 0.6
4 465 A1 A1 1.4 1.4
5 465 B1 A1 4.5 3.1
6 465 B2 B1 7.3 2.8
</code></pre>