如何在最后一个可用交易日转置非交易日的推特数据? (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)就要来了

V神力挺的交易所Blockchain.io已经获得美国证监会和法国央行许可,即将上线!

如何将异步图像渲染到我的推特卡中(推特:图像)

如何获得关注者数量大于值的推特关注者列表?