熊猫计数正/负/中性值

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_countscut 变量给出了相同的解决方案。

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() 似乎是一个更清洁的解决方案。

以上是关于熊猫计数正/负/中性值的主要内容,如果未能解决你的问题,请参考以下文章

熊猫计数分组值[重复]

Groupby - 具有重复值的熊猫 df 计数

熊猫:拆分字符串和计数值? [复制]

如何根据值计数过滤熊猫 DataFrame?

在熊猫数据框中按日期和计数值分组

如何在熊猫中按值计数对列进行排序