【问题标题】:Percentage of False in a column, groupby列中 False 的百分比,groupby
【发布时间】:2019-08-02 11:00:56
【问题描述】:

我对此很陌生。我试图弄清楚如何在 droupby 命令之后计算为真/假的 elementName 的百分比。我需要百分比而不是计数。

我将不胜感激各种帮助) 他就是我的数据的样子:

comp isB element FY

1750 .     false         62          62             
           true          305         305        
1800       false         52          52         
           true          356         356    

【问题讨论】:

    标签: pandas numpy dataframe group-by pandas-groupby


    【解决方案1】:
    # Print original DataFrame
    >>> df
    
        comp    isB     element FY
    0   1750    False   62      62
    1   1750    True    305     305
    2   1800    False   52      52
    3   1800    True    356     356
    
    # Sum number of elements
    >>> df['total_count'] = df.groupby('comp').transform(sum)['element']
    >>> df
    
        comp    isB     element FY  total_count
    0   1750    False   62      62      367
    1   1750    True    305     305     367
    2   1800    False   52      52      408
    3   1800    True    356     356     408
    
    # Calculate fraction or percent according to preference
    >>> df['fraction'] = df['element'] / df['total_count']
    >>> df['percent'] = df['fraction'] * 100
    >>> df
    
        comp    isB     element FY  total_count fraction    percent
    0   1750    False   62      62  367         0.168937    16.893733
    1   1750    True    305     305 367         0.831063    83.106267
    2   1800    False   52      52  408         0.127451    12.745098
    3   1800    True    356     356 408         0.872549    87.254902
    
    # Get series using group-by
    >>> df.groupby(['comp', 'isB'])['percent'].max()
    
          comp     isB  
    1750  False    16.893733
          True     83.106267
    1800  False    12.745098
          True     87.254902
    Name: percent, dtype: float64
    

    【讨论】:

    • 有没有办法转换字符串元素?由于我的“元素”列由许多字符串变量组成,我收到一条错误消息“无法将大小为 2448 的数组重新整形为形状 (408,7)”。
    • 请按照此处的建议发布一个新问题:stackoverflow.com/questions/20109391/…
    【解决方案2】:

    您可以只使用.mean(),因为 numpy 在该操作期间会将布尔值转换为整数。

    In [17]: import pandas as pd
    
    In [18]: import numpy as np
    
    In [19]: df = pd.DataFrame({'a': np.random.choice([True, False], size=10),
                                'b': np.random.choice(['x', 'y'], size=10)})
    
    In [20]: df
    Out[20]: 
           a  b
    0  False  x
    1   True  y
    2  False  y
    3   True  x
    4   True  y
    5  False  y
    6  False  x
    7  False  y
    8   True  x
    9   True  y
    
    In [21]: df.groupby(['b']).mean()
    Out[21]: 
         a
    b     
    x  0.5
    y  0.5
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 2018-01-21
      • 2019-01-26
      • 2021-09-13
      • 2022-06-13
      • 2020-03-27
      • 2019-04-09
      • 1970-01-01
      相关资源
      最近更新 更多