【问题标题】:Compute relative frequency from count table从计数表计算相对频率
【发布时间】:2023-04-05 08:42:02
【问题描述】:

我有一个大型数据框,其中包含多个项目的有效数量,并希望将它们更改为相对频率。所以我添加了一个列,对每一行的列中的所有值求和:

product    apple  pear   banana    sum
Jean           3     5        1      9
Phil           2     7        1     10
Yanis          5     4        4     14

接下来我必须应用公式 x/sum(X)*100 来获取数据帧中每个值的相对频率,以便获得这样的数据帧:

product      apple      pear       banana
Jean         33.33     55.55        11.11
Phil            20        70           10
Yanis        37.71     28.57        28.57

如果不指定每一列,我真的不知道该怎么做(这只是示例的一个小数据集)

我现在的代码:

df = pd.read_csv(f, sep="\t", index_col='product')
dff = df.transpose()
dff["sum"] = dff.sum(axis=1)

提前谢谢你

【问题讨论】:

    标签: python pandas dataframe frequency


    【解决方案1】:

    打印(df)

       product  apple  pear  banana  sum
    0    Jean      3     5       1    9
    1    Phil      2     7       1   10
    2   Yanis      5     4       4   14 
    

    解决方案

      df.drop(columns=['sum']).set_index('product').apply(lambda x: ((x/x.sum())*100).round(2), axis=1).reset_index()
    
    
    
    product apple   pear    banana
    0   Jean    33.33   55.56   11.11
    1   Phil    20.00   70.00   10.00
    2   Yanis   38.46   30.77   30.77
    

    【讨论】:

    • 为什么投反对票?您的解决方案似乎不错...+1
    • @Andrej Kesely 只是让投反对票的人告诉我为什么他们投票给我,以便我学习
    【解决方案2】:

    df 定向为:

             apple  pear  banana
    product                     
    Jean         3     5       1
    Phil         2     7       1
    Yanis        5     4       4
    

    只需使用:

    df.div(df.sum(axis=1), axis=0)*100
    >>
                 apple       pear     banana
    product                                 
    Jean     33.333333  55.555556  11.111111
    Phil     20.000000  70.000000  10.000000
    Yanis    38.461538  30.769231  30.769231
    

    【讨论】:

      【解决方案3】:

      如果你有这个数据框:

        product  apple  pear  banana
      0    Jean      3     5       1
      1    Phil      2     7       1
      2   Yanis      5     4       4
      

      你可以这样做:

      df.iloc[:, 1:] = df.iloc[:, 1:].div(df.sum(axis=1), axis=0) * 100
      print(df)
      

      打印:

        product      apple       pear     banana
      0    Jean  33.333333  55.555556  11.111111
      1    Phil  20.000000  70.000000  10.000000
      2   Yanis  38.461538  30.769231  30.769231
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 2017-04-30
        • 2017-02-25
        • 1970-01-01
        • 2018-09-30
        相关资源
        最近更新 更多