我想出了一种基于两个字段进行分组并获得计数的方法:
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%的“结果”的“品牌”。
所以,我想看看这个(以及其他符合业务逻辑规则的品牌)。
Estee Lauder negative 7 0.233333333
positive 23 0.766666667
我该怎么做?
添加到@Vishnudev的答案中,使用:
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
尝试
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')