如何在最后一个可用交易日转置非交易日的推特数据? (Python)
Posted
技术标签:
【中文标题】如何在最后一个可用交易日转置非交易日的推特数据? (Python)【英文标题】:How do I transpose twitter data of a non trading day on the last available trading day? (python) 【发布时间】:2022-01-11 14:17:14 【问题描述】:对于一个学校项目,我预测“绿色”ETF 的价格走势以及与气候变化相关的推文情绪和推文量。
我预测的滞后为 1,所以周一的预测是用周日的数据进行的。周日的数据包括周日的推文数据(交易量和情绪)和与周五的交易数据相等的市场数据,因为周末没有交易。然而,为了准确预测,我需要周日的推特数据和周五的交易数据。
我的问题:如何获取最后一个可用交易日非交易日的推文数据(交易量和情绪)?所以我可以删除周末/节假日条目。
所以我的新手想法是这样的:我需要一个公式,在 df['adjusted close'] 列中查找 NaN 如果下一个值是 NAN:查看下一个值:如果下一个值不是 NAN:选择与该日期的 NAN 对应的“情绪”值。并用它来替换 'sentiment' 中与 NaN 之前的日期相对应的值
import datetime
import pandas as pd
date = pd.date_range(start="2021-01-01",end="2021-01-20")
df = pd.DataFrame('date': date,
'tweet_volume': range(20),
'sentiment': range(20),
'adjusted close': [0,'NaN',2,3,4,5,6,7,'NaN','NaN',10,11,12,13,'NaN','NaN','NaN',17,18,19],
columns = ['date', 'tweet_volume', 'sentiment', 'adjusted close'])
df = df.set_index('date')
gives:
tweet_volume sentiment adjusted close
date
2021-01-01 0 0 0
2021-01-02 1 1 NaN
2021-01-03 2 2 2
2021-01-04 3 3 3
2021-01-05 4 4 4
2021-01-06 5 5 5
2021-01-07 6 6 6
2021-01-08 7 7 7
2021-01-09 8 8 NaN
2021-01-10 9 9 NaN
2021-01-11 10 10 10
2021-01-12 11 11 11
2021-01-13 12 12 12
2021-01-14 13 13 13
2021-01-15 14 14 NaN
2021-01-16 15 15 NaN
2021-01-17 16 16 NaN
2021-01-18 17 17 17
2021-01-19 18 18 18
2021-01-20 19 19 19
and i want:
tweet_volume sentiment adjusted close
date
2021-01-01 *1* *1* 0
2021-01-02 1 1 NaN
2021-01-03 2 2 2
2021-01-04 3 3 3
2021-01-05 4 4 4
2021-01-06 5 5 5
2021-01-07 6 6 6
2021-01-08 *9* *9* 7
2021-01-09 8 8 NaN
2021-01-10 9 9 NaN
2021-01-11 10 10 10
2021-01-12 11 11 11
2021-01-13 12 12 12
2021-01-14 *16* *16* 13
2021-01-15 14 14 NaN
2021-01-16 15 15 NaN
2021-01-17 16 16 NaN
2021-01-18 17 17 17
2021-01-19 18 18 18
2021-01-20 19 19 19
So I can then drop the rows with NaN's
【问题讨论】:
你能演示一下这个数据框的输出是什么样的吗?我有点困惑,我承认。 我已经更新了我的问题 this question 的副本。 【参考方案1】:这行得通:
date = pd.date_range(start="2021-01-01",end="2021-01-20")
df = pd.DataFrame('date': date,
'tweet_volume': range(20),
'sentiment': range(20),
'adjusted close': [0,'NaN',2,3,4,5,6,7,'NaN','NaN',10,11,12,13,'NaN','NaN','NaN',17,18,19],
columns = ['date', 'tweet_volume', 'sentiment', 'adjusted close'])
df = df.replace('NaN', np.nan)
df = df.set_index('date')
df[['tweet_volume','sentiment']] = df.groupby((df['adjusted close'].diff(0).notnull()).astype('int').cumsum()).transform('last')[['tweet_volume','sentiment']]
df = df.dropna()
print(df)
输出:
tweet_volume sentiment adjusted close
date
2021-01-01 1 1 0.0
2021-01-03 2 2 2.0
2021-01-04 3 3 3.0
2021-01-05 4 4 4.0
2021-01-06 5 5 5.0
2021-01-07 6 6 6.0
2021-01-08 9 9 7.0
2021-01-11 10 10 10.0
2021-01-12 11 11 11.0
2021-01-13 12 12 12.0
2021-01-14 16 16 13.0
2021-01-18 17 17 17.0
2021-01-19 18 18 18.0
2021-01-20 19 19 19.0
【讨论】:
非常感谢!你的代码确实做了我想要的:)。以上是关于如何在最后一个可用交易日转置非交易日的推特数据? (Python)的主要内容,如果未能解决你的问题,请参考以下文章
余承东:华为唯一亏损业务是汽车,马斯克推特交易再生变,京东方获iPhone 14订单,今日更多大新闻在此...
Vitalik :以太坊扩容方案渐趋成熟,分片技术(Sharding)就要来了