<p>我认为可以使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.div.html" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.transform.html" rel="nofollow noreferrer">^{<cd2>}</a>来创建新列:</p>
<pre><code>AID['PercentF'] = AID['ANumOfF'].div(AID.groupby('AID')['ANumOfF'].transform('sum'))
print (AID)
AID FID ANumOfF PercentF
0 1 X 1 0.166667
1 1 Y 5 0.833333
2 2 Z 6 0.166667
3 2 A 1 0.027778
4 2 X 11 0.305556
5 2 B 18 0.500000
VID['PercentF'] = VID['ANumOfF'].div(VID.groupby('VID')['ANumOfF'].transform('sum'))
print (VID)
VID FID ANumOfF PercentF
0 1A X 10 0.019608
1 1A A 500 0.980392
2 2A A 62 0.496000
3 2A B 10 0.080000
4 2A C 30 0.240000
5 2A X 23 0.184000
</code></pre>
<p>然后<code>inner</code>通过<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.merge.html" rel="nofollow noreferrer">^{<cd4>}</a>、多个列和最后一个<code>groupby</code>通过聚合<code>sum</code>连接:</p>
<pre><code>df = pd.merge(AID, VID, on='FID')
df['Overlap'] = df.PercentF_x.mul(df.PercentF_y)
df = df.groupby(['AID','VID'], as_index=False)['Overlap'].sum()
print (df)
AID VID Overlap
0 1 1A 0.003268
1 1 2A 0.030667
2 2 1A 0.033224
3 2 2A 0.110000
</code></pre>