我正在研究情绪分析问题。我的数据帧如下
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操作,但未提供所需的输出。感谢帮助。
您可以使用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