我在研究一个情绪分析问题。我的数据如下所示
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)将每个“滴答器”的tweet聚合(合并)在一天的水平上。这样我就可以进行情绪分析,并在给定的一天内获得每个滴答的整体情绪得分。
(2)" sentiment_score“的值为{0,1,2,3,4},我想创建5个新列,其中包含no.of tweet的计数,其中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操作,但它们没有给出所需的输出。感谢你的帮助。
发布于 2019-12-21 10:02:17
您可以使用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
编辑
如果您还想合并tweet,您可以在上述基础上完成以下工作:
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 verticallyhttps://stackoverflow.com/questions/59435068
复制相似问题