按日期合并推文,返回情绪得分计数

merging tweets by date, returning count of sentiment score

我正在处理情绪分析问题。我的数据框如下

   tweet     sentiment_score    timestamp   ticker
0   abc       3                2018-09-19   $AMD
1   def       1                2018-10-19   $AMD
2   wtf       2                2018-07-12   $PH   
3   pqr       2                2018-07-12   $PH
4   lmn       3                2018-08-23   $FB
5   jqr       3                2018-08-23   $FB
6   okm       1                2018-08-24   $FB

我要

(1)聚合(合并)每天 "ticker" 的推文。所以我可以 运行 进行情绪分析,并在给定的一天获得每个代码的整体情绪得分。

(2)"sentiment_score" 的值为 {0,1,2,3,4},我想创建 5 个新列,其中包含 no.of 条推文的计数,其中 sentiment_score 是 {0,1,2,3,4} 每 "ticker" 在一天级别。

预期输出


   tweet        timestamp   ticker   setiment_1 sentiment_2 sentiment_3
0   abc,def     2018-09-19  $AMD         1         0          1
2   wtf,pqr     2018-07-12  $PH          0         2          0     
4   lmn,jqr     2018-08-23  $FB          0         0          2
6   okm         2018-08-24  $FB          1         0          0

我尝试了单独的 groupby 操作,但它们没有提供所需的输出。感谢帮助。

您可以使用 pandas.pivot_table(...):

df["_dummy"]=1
df2=df.pivot_table(index=["timestamp", "ticker"], columns="sentiment_score", values="_dummy", aggfunc="sum").fillna(0)

输出:

sentiment_score      2    3
timestamp  ticker
2018-07-12 $AVGO   1.0  0.0
2018-07-19 $PH     1.0  0.0
2018-08-23 $FB     0.0  1.0
2018-09-19 $AMD    0.0  1.0
2018-10-09 $CAT    0.0  1.0

文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

编辑

如果你还想合并推文,你可以在上面的基础上做:

df3=df.pivot_table(index=["timestamp", "ticker"], columns="sentiment_score", values="stocktwit_tweet", aggfunc="sum")
#and to merge it together with previous df:
res=pd.concat([df2, df3], axis=1)
#axis=1 - merge df-s horizontally, axis=0 - merge vertically