Процент ложных в столбце, в группе - PullRequest
1 голос
/ 12 марта 2019

Я довольно новичок в этом.Я пытаюсь выяснить, как рассчитать процентное значение elementName, которые имеют значение True / False после команды droupby.Вместо подсчета мне нужен процент.

Буду признателен за любую помощь) Он выглядит так, как мои данные:

comp isB element FY

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

Ответы [ 2 ]

0 голосов
/ 12 марта 2019
# 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
0 голосов
/ 12 марта 2019

Вы можете просто использовать .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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...