我有一个如下所示的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
答案 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()
的成本很高,则可以将其分配给某个变量以供以后使用。