按日期合并推文,返回情感分数的计数

问题描述 投票:0回答:1

我正在研究情绪分析问题。我的数据帧如下

   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个新列,其中包含tentiets的计数,其中sentiment_score为{0,1,2,3, 4},用于一天中的每个“股票行情指示器”。

预期输出


   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操作,但未提供所需的输出。感谢帮助。

python pandas-groupby sentiment-analysis
1个回答
1
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.