Python 熊猫计数正/负/中性值

Python 熊猫计数正/负/中性值,python,pandas,group-by,aggregate,pandas-groupby,Python,Pandas,Group By,Aggregate,Pandas Groupby,在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

在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,我会使用
    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\u counts对
    cut
    变量给出了相同的解决方案

    pd.value_counts(cut, sort=False).rename_axis('senti').reset_index(name='count')
    

    使用
    apply
    映射到组的另一个版本:

    df.groupby(df['senti'].apply(lambda x: 'negative' if x < -0.1 else 'positive' if x > 0.1 else 'neutral'))['senti'].count()
    
    df.groupby(df['senti'].apply(λx:'negative'如果x<0.1,则为'positive'如果x>0.1,则为'neutral'))['senti'].count()
    
    使用
    pandas.qcut
    与自定义料仓使用
    值_计数
    应给出相同的结果,但比使用
    分组方式
    要快一点,即
    pd.cut(…).value_计数()
    。正数和负数是错误的,但它可以工作@刘易桑德森喊道:-)很高兴我能帮上忙。