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

标签 python pandas dataframe

我有两种类型的数据框:

数据框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/

相关文章:

php - Python 套接字服务器到 PHP 客户端套接字

python - 将混合格式字符串列转换为日期时间 Dtype

python - NaN 值与分隔符相同 - 如何导入?

python - 在 Pandas 中是否有一种 pythonic 的方法来做一个列联表?

python - 将列添加到包含先前数据平均值的 Pandas DataFrame 的末尾

python - Django 如何比较对象?

Pythoncherpy,解析query_string

python - Pandas 数据帧 : Reduce Diagonal Sub-Frame to Single Row or How to Fill a Dataframe Piece by Piece

Python 类继承 : How to initialize a subclass with values not in the parent class

python-3.x - 数据框在所有行的特定字符串之前拆分