微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多个时间序列从单个列中分离到每个序列中的单独列中?

如何解决将多个时间序列从单个列中分离到每个序列中的单独列中?

我正在Mac OS 10.11.06(el capitan)上使用Python 3。

我有一个.csv数据集,包含约3700个时间序列集(长度不等)。数据当前的格式如下:

当前格式

    Trade_date  price_usd   ticker
0   2016-01-01  434.33000   BTC
1   2016-01-02  433.44000   BTC
2   2016-01-03  430.01000   BTC
3   2016-01-04  433.09000   BTC
4   2016-01-05  431.96000   BTC
... ... ... ...
2347227 2020-10-19  74.13000    BRAIN
2347228 2020-10-20  71.97000    BRAIN
2347229 2020-10-21  76.64000    BRAIN
2347230 2020-10-22  80.90000    BRAIN
2347231 2020-10-19  0.15004     DAOFI

暂时忽略认的数字索引,请注意,datetime列Trade_date使得值序列与每个新的股票行情指示器重复。我的目标是对数据进行转换,以使每个报价器名称都成为列标题,在该列标题下,其相应的每日价格会以正确的顺序列出,并带有记录其的日期时间值(即,日期时间索引不会重复,并且代码是行):

目标格式

Trade_date   ticker1   ticker2   ...   tickerN
day1         t1p1      t2p1      ...   tNp1
day2         t1p2      t2p2      ...   etc...
.
.
.
dayK

到目前为止,我已经尝试了各种方法包括使用各种方法进行的实验,例如stack()/ unstack(),groupby()等,以及尝试迭代这些值以将其分配给新DF的自定义函数,在该DF中,我创建了一个结构化的框架,可以将这些值放入其中,但是无济于事(请参阅下面的失败尝试)。

新的空目标数据框,其股票代码为col,Trade_date范围为索引:

            BTC ETH XRP MKR LTC USDT BCH XLM EOS BNB ... MTLX INDEX WOA HAUT THRM YFED NMT DOKI BRAIN DAOFI
2016-01-01  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-02  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-03  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-04  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-05  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

尝试填充以上内容失败...

for element in crypto_df['ticker']:
    if element == new_df.column and crypto['Trade_date'] == new_df.index:
        df['ticker'] = element

new_df.head()

我的最终目标是使用FBProphet生成多序列时间序列预测,因为它能够在“单个”模型中处理多个时间序列预测。

我刚刚想到的最后一个想法是,可以为每个股票代码创建单独的数据帧,然后沿着日期时间索引重新加入,并在新DF中创建单独的列,但这似乎有点不合时宜。大约(例如,我刚刚对具有股票数据的数千个.csv文件执行了此操作)...但是,如果有解决方案,我仍然想找到一个更直接的解决方案?当然,将来这种情况还会再次发生!

感谢您的任何想法...

解决方法

您可以set_indexunstack

print(df.set_index(["trade_date","ticker"]).unstack("ticker"))

           price_usd                 
ticker         BRAIN     BTC    DAOFI
trade_date                           
2016-01-01       NaN  434.33      NaN
2016-01-02       NaN  433.44      NaN
2016-01-03       NaN  430.01      NaN
2016-01-04       NaN  433.09      NaN
2016-01-05       NaN  431.96      NaN
2020-10-19     74.13     NaN  0.15004
2020-10-20     71.97     NaN      NaN
2020-10-21     76.64     NaN      NaN
2020-10-22     80.90     NaN      NaN
,

首先使用.groupby(),然后使用.unstack()

import pandas as pd
from io import StringIO

text = """
trade_date  price_usd   ticker
2016-01-01  434.33000   BTC
2016-01-02  433.44000   BTC
2016-01-02  430.01000   Google
2016-01-03  433.09000   BTC
2016-01-03  431.96000   Google
"""

df = pd.read_csv(StringIO(text),sep='\s+',header=0)

df.groupby(['trade_date','ticker'])['price_usd'].mean().unstack()

结果数据框:

trade_date ticker   BTC Google
2016-01-01  434.33  NaN
2016-01-02  433.44  430.01
2016-01-03  433.09  431.96

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。