熊猫计数正/负/中性值
Posted
技术标签:
【中文标题】熊猫计数正/负/中性值【英文标题】:Pandas Count Positive/Negative/Neutral Values 【发布时间】:2017-08-11 23:33:22 【问题描述】:在 Python Pandas 中,我有一个包含以下格式的列和记录的数据框:
text source senti
-------------------------------
great food site1 0.6
awful staff site4 -0.4
good chef site8 0.4
average food site6 0.05
bad food site2 -0.8
文本列本质上是对某事的描述或意见。我想对数据集的平均情绪得出一些结论,输出如下。
sentiment count
----------------
positive 2
neutral 1
negative 2
我们将 'senti' 的计数分为正面、负面或中性。
满足以下条件的情绪计入每组:
积极记录的情绪 >0.1 中性记录的得分 >-0.1 AND 负面记录得分提前致谢
【问题讨论】:
将pandas.qcut
与自定义垃圾箱一起使用
【参考方案1】:
我会使用pd.cut
+ groupby
cut = pd.cut(
df.senti,
[-np.inf, -.1, .1, np.inf],
labels=['positive', 'neutral', 'negative']
)
df.groupby(cut).senti.count().reset_index(name='count')
senti count
0 positive 2
1 neutral 1
2 negative 2
正如@root 所指出的,pd.value_counts
对cut
变量给出了相同的解决方案。
pd.value_counts(cut, sort=False).rename_axis('senti').reset_index(name='count')
【讨论】:
使用value_counts
应该得到相同的结果,但比使用groupby
快一点,即pd.cut(...).value_counts()
。
正面和负面是错误的方式,但它有效!
@LewisAnderson 哎呀 :-) 很高兴我能帮上忙。【参考方案2】:
另一个使用apply
映射到组的版本:
df.groupby(df['senti'].apply(lambda x: 'negative' if x < -0.1 else 'positive' if x > 0.1 else 'neutral'))['senti'].count()
【讨论】:
而不是 ...['senti'].count()
,只使用 .size()
似乎是一个更清洁的解决方案。以上是关于熊猫计数正/负/中性值的主要内容,如果未能解决你的问题,请参考以下文章