gpt4 book ai didi

python - 如何在 pandas 数据框中创建包含百分比等的列

转载 作者:行者123 更新时间:2023-12-01 03:07:33 25 4
gpt4 key购买 nike

我有两种类型的数据框:

数据框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-我想在每个 Dataframe 中创建一个新列,用于计算每个 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=1VID=1A 只有 FID=X 相同,因此重叠计算将为:0.167* 0.02 = 0.00334

AID=2VID=2A 具有共同的 FID A、B 和 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

我怎样才能实现这个目标?

最佳答案

我认为你可以使用divtransform用于创建新列:

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

然后内部加入 merge 、多列以及最后一个带有聚合 sumgroupby:

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

关于python - 如何在 pandas 数据框中创建包含百分比等的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43205585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com