首页 > 解决方案 > 计算数据框熊猫中所有联盟的百分比

问题描述

我有看起来像的数据框(实际框架的年份从 1990 年到 2020 年):

Chains_Normalize Alliance_Name
1990 0.000 盖恩特公司
1990 0.000 凯尔公司
1990 0.000 新公司
1991 13.222 悲伤公司
1991 18.152 第二公司
1991 16.333 新公司
1992 19.212 没有公司
1992 0.000 第三公司
1992 14.332 第四公司

如果 Chains_Normalize 不为 0,我必须计算每年的联盟百分比。(这个想法是计算每年数据框中所有联盟的百分比)

结果将如下所示:

Year  Percentage
1990  0.000
1991  33.333
1992  22.222

1990 的联盟全部为零,百分比为 0。

1991 年有 3 个非零联盟和 (3/9)*100 = 33.333

1992 年有 2 个非零联盟和 (2/9)*100 = 22.222

标签: pythonpandasdataframegroup-bypandas-groupby

解决方案


只需计算每年的非零值,然后除以长度df并乘以 100(您已经手动使用(N/9)*100):

>>> df['Chains_Normalize'].ne(0).groupby(df['Year']).sum() / len(df) * 100
Year
1990     0.000000
1991    33.333333
1992    22.222222
Name: Chains_Normalize, dtype: float64

这是有效的,因为df['Chains_Normalize'].ne(0)返回一系列布尔值,其中联盟非零,然后您可以求和:

>>> df['Chains_Normalize'].ne(0)
0    False
1    False
2    False
3     True
4     True
5     True
6     True
7    False
8     True
Name: Chains_Normalize, dtype: bool

推荐阅读