熊猫计算每列的返回计数,而不是逻辑语句中的奇异值

时间:2018-07-26 23:01:06

标签: python pandas dataframe count

我有一个如下所示的df:

id   message    cate           score
1    abc        positive        1
2    def        negative        2
3    ghi        neutral         3

我想对每次positive出现的次数进行计数:

我尝试过:

df_sentences[df_sentences.cate =='positive'].count()

它返回:

id         1
message    1
cate       1
score      1

当我尝试以下行时,新列中显示nan

df_sentences['total_count_positive'] = df_sentences[df_sentences.cate =='positive'].count()

我如何使新的df看起来像这样?:

id   message    cate           score   total_count_positive total_count_negative    total_count_neutral

    1    abc        positive        1              1           1           
                                                                     1
    2    def        negative        2
    3    ghi        neutral         3

1 个答案:

答案 0 :(得分:1)

伯爵对我有用。

In [294]: df['total_positive'] = df.cate[df.cate == 'positive'].count()

In [296]: df['total_negative'] = df.cate[df.cate == 'negative'].count()

In [297]: df['total_neutral'] = df.cate[df.cate == 'neutral'].count()

In [298]: df['total_x'] = df.cate[df.cate == 'x'].count()       # to show it's actually counting something

In [299]: df
Out[299]:
   id message      cate  score  total_positive  total_negative  total_neutral  total_x
0   1     abc  positive      1               1               1              1        0
1   2     def  negative      2               1               1              1        0
2   3     ghi   neutral      3               1               1              1        0

在没有cate所有唯一值的先验知识的情况下工作的更好方法是使用value_counts()。此方法以Series形式返回摘要数据,我们可以将其添加到DataFrame中。

In [307]: for i, c in enumerate(df.cate.value_counts()):
     ...:     tag = df.cate.value_counts().index[i]
     ...:     df[tag + '_count'] = c
     ...:

In [308]: df
Out[308]:
   id message      cate  score  neutral_count  negative_count  positive_count
0   1     abc  positive      1              1               1               1
1   2     def  negative      2              1               1               1
2   3     ghi   neutral      3              1               1               1

最后,我根本不会将摘要存储在DataFrame中,因为我们只能使用value_counts()并可以访问dict之类的单个值。

In [313]: df.cate.value_counts()
Out[313]:
neutral     1
negative    1
positive    1
Name: cate, dtype: int64

In [312]: df.cate.value_counts()['positive']
Out[312]: 1

如果您使用的是特别大的DataFrame,并且继续执行value_counts()的成本很高,则可以将其分配给某个变量以供以后使用。