2017-03-20 8 views
2

を数え、私は次の形式での列とレコードを持つデータフレームを持っている:パンダは、正/負/中性値Pythonのパンダで

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 

テキスト列は、本質的に何かの説明や意見です。私は、このような出力で、データセットの平均的な感情についていくつかの結論を出したいと思います。

我々は「senti」、正、負または中性としてグループ化の数を持っている
sentiment count 
---------------- 
positive  2 
neutral  1 
negative  2 

感情は、以下の条件を満たす際に、各グループとしてカウントされる。

  • 正レコードが> 0.1
  • 中性レコードが> -0.1 AND < 0.1
  • 負レコードがスコアをスコア感情持ってきています事前に< -0.1

ビッグ感謝

+1

使用 '' value_counts'を使用したカスタムビン –

答えて

5

@rootで指摘したように、私は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 

を使用すると思い、pd.value_countscut変数に同じソリューションを提供します。

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

とpandas.qcut'は、同じ結果を与えることが、少し速くよりでなければなりません'groupby'、すなわち' pd.cut(...)。value_counts() 'を実行します。 – root

+0

正と負が間違った方法でしたが、それは動作します! –

+0

@LewisAnderson whoops :-)私は助けてくれると嬉しいです。 – piRSquared

0

グループにマッピングするapplyを使用して別のバージョン:

df.groupby(df['senti'].apply(lambda x: 'negative' if x < -0.1 else 'positive' if x > 0.1 else 'neutral'))['senti'].count()