我有两种类型的数据帧:
数据帧AID
:
AID FID ANumOfF
1 X 1
1 Y 5
2 Z 6
2 A 1
2 X 11
2 B 18
数据帧VID
:
VID FID VNumOfF
1A X 10
1A A 500
2A A 62
2A B 10
2A C 30
2A X 23
1-我想在每个数据帧中创建一个新列,用于计算每个FID为每个VID保留的百分比。因此,上述示例的结果如下:
新数据帧AID
:
AID FID ANumOfF PercentF
1 X 1 0.167 (1/6)
1 Y 5 0.833 (5/6)
2 Z 6 0.167 (6/36)
2 A 1 0.028
2 X 11 0.305
2 B 18 0.5
新数据帧VID
:
VID FID VNumOfF PercentF
1A X 10 0.02
1A A 500 0.98
2A A 62 0.50
2A B 10 0.08
2A C 30 0.24
2A X 23 0.18
到目前为止,我知道以下代码给出了每个AID/VID的总和:
AID.groupby('AID')['ANumFS'].sum()
VID.groupby('VID')['VNumFS'].sum()
2-在那之后,我想创建一个新的数据帧来查看存在的每对VID和AID的“重叠”。它会把他们分享的百分比的乘积加起来。因此,对于上面生成的新数据帧,我们将得到以下结果:
由于AID=1
和VID=1A
只有FID=X
共同点,重叠计算将是:0.167*0.02 = 0.00334
AID=2
和VID=2A
有FIDs A, B and X
的共同点,所以重叠计算应该是:0.028*0.5 + 0.305*0.18 + 0.5*0.08 = 0.1089
AID VID Overlap
1 1A 0.00334
1 2A 0.03006
2 1A 0.03354
2 2A 0.1089
我怎样才能做到这一点
我认为可以使用^{} 和^{} 来创建新列:
然后} 、多个列和最后一个
inner
通过^{groupby
通过聚合sum
连接:好的,首先使用groupby得到如下表:
然后join该数据帧与原始数据帧:
最后用
ANumOfF
列除以TotalNum
列得到百分比希望这有帮助
相关问题 更多 >
编程相关推荐