【问题标题】:How do I transpose twitter data of a non trading day on the last available trading day? (python)如何在最后一个可用交易日转置非交易日的推特数据? (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 的副本。

标签: python pandas twitter prediction stock


【解决方案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

【讨论】:

  • 非常感谢!你的代码确实做了我想要的:)。
猜你喜欢
  • 2017-04-24
  • 2020-07-10
  • 2017-11-22
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多