我想出了一种方法来进行分组并根据两个字段获取计数:
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
我怎样才能做到这一点?
最佳答案
尝试
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')
关于python - 如何获得负数百分比的计数并按最大负数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60162102/