如何在最后一个可用交易日转换非交易日的推特数据?(python)



对于一个学校项目,我预测了与气候变化相关的推特情绪和推特数量的"绿色"ETF价格走势。

我的预测滞后1,所以周一的预测是用周日的数据做出的。周日的数据包括周日的推特数据(成交量和情绪(和与周五交易数据相等的市场数据,因为周末没有交易。然而,为了准确预测,我需要推特周日的数据和周五的交易数据。

我的问题是:如何在最后一个可用交易日获得非交易日的推特数据(交易量和情绪(?这样我就可以删除周末/假期的条目了。

因此,我的新手想法是:我需要一个公式,在df[‘adjusted close’]列中查找NaN。如果下一个值是NaN:查看下一个数值:如果下一值不是NaN:选择与该日期的NaN相对应的"情绪"值。并使用它来替换与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

这是有效的:

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

最新更新