Как я могу получить процент отрицательных и порядок наиболее отрицательных? - PullRequest
2 голосов
/ 11 февраля 2020

Я нашел способ сделать группу и получить счет на основе двух полей:

df.groupby(['brand','result']).size()
df.groupby(['brand','result']).count()

Это дает те же результаты. Мои данные теперь выглядят так:

Johnson's Baby Powder   negative         21  
                        neutral          5  
                        positive         121

Estee Lauder            negative         7  
                        positive         23

Calvin Klein            negative         10  
                        neutral          3  
                        positive         29 

Я хотел бы получить процент результатов для каждой марки, например так.

Johnson's Baby Powder   negative    21  0.142857143
                        neutral     5   0.034013605
                        positive    121 0.823129252

Estee Lauder            negative    7   0.233333333
                        positive    23  0.766666667

Calvin Klein            negative    10  0.238095238
                        neutral     3   0.071428571
                        positive    29  0.69047619

В конечном счете, я хочу показать только «бренд», который имеет «результат» с отрицательным> 20%.

Итак, я хочу увидеть это (и другие бренды, которые соответствуют правилам бизнес-логики c).

Estee Lauder            negative    7   0.233333333
                        positive    23  0.766666667

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Добавляя к ответу @ Вишнудева, используйте:

print(df[df.groupby(['brand'])['result'].value_counts(normalize=True).ge(0.5).tolist()])

Вывод:

          brand    result  number
3  Estee Lauder  negative       7
4  Estee Lauder  positive      23
1 голос
/ 11 февраля 2020

Попробуйте

x = df.groupby(['brand'])['result'].value_counts(normalize=True)

Пример вывода данных

>>> y = x.loc[(x.index.get_level_values(1) == 'negative')]

>>> y[y>0.2]
airline         airline_sentiment
American        negative             0.710402
Delta           negative             0.429793
Southwest       negative             0.490083
US Airways      negative             0.776862
United          negative             0.688906
Virgin America  negative             0.359127
Name: airline_sentiment, dtype: float64

>>> y[y>0.2].index.get_level_values(0)
Index(['American', 'Delta', 'Southwest', 'US Airways', 'United',
       'Virgin America'],
      dtype='object', name='airline')
...