美文网首页
Pandas不同日期数据做计算

Pandas不同日期数据做计算

作者: 虚白无类 | 来源:发表于2019-05-16 22:02 被阅读0次

    拿金融数据举例,通过tushare获取个股历史行情数据

    >>> import tushare as ts
    >>> ts.get_his_data('60048')
                 open   high  close    low  ...    ma20      v_ma5     v_ma10     v_ma20
    date                                    ...                                         
    2019-05-16  34.16  34.50  33.85  33.34  ...  33.928  150847.40  134251.66  133670.39
    2019-05-15  34.28  34.80  34.10  33.80  ...  34.038  154416.84  141012.87  142859.79
    2019-05-14  34.00  35.10  33.63  33.27  ...  34.035  150851.64  141492.06  148408.40
    2019-05-13  32.00  34.97  34.64  31.90  ...  33.949  142929.32  134009.24  144103.20
    
    

    如果要计算05-16的涨跌幅,需要用(今日收盘价-昨日收盘价)/昨日收盘价.

    一般使用pd.DataFrame.shift可以将不同日期的值取入同一行计算。交易日不是连续的,所以只能移动数据。
    DataFrame.shift(periods=1, freq=None, axis=0, fill_value=None)
    freq指定时,移动的就是dataframe的index,axis可以设置移动列。
    所以根据情况设置不同的periods和freq就能方便同不同日期的值做计算了。

    >>>  df['pre_close']=df.shift(-1)['close']
    

    通过apply新增一列涨跌幅,axis为1代表lambda这里传入的是一行,而不是一列(series), 就可以通过原来不同列的值计算新的一列了。

    >>> df['chg_pct'] = df.apply(lambda x: (x.close-x.pre_close)/x.pre_close, axis=1)
    
    

    结果:

    >>> df.head(5)
                 open   high  close  ...     v_ma20  pre_close   chg_pct
    date                             ...                                
    2019-05-16  34.16  34.50  33.85  ...  133670.39      34.10 -0.007331
    2019-05-15  34.28  34.80  34.10  ...  142859.79      33.63  0.013976
    2019-05-14  34.00  35.10  33.63  ...  148408.40      34.64 -0.029157
    2019-05-13  32.00  34.97  34.64  ...  144103.20      32.48  0.066502
    2019-05-10  30.66  32.55  32.48  ...  144100.62      29.79  0.090299
    
    

    实际应用场景可能会复杂很多,比如用到分组移动

    >>> df.groupby('ticker', as_index=False, sort=False).shift(-1, fill_value=0)
    

    相关文章

      网友评论

          本文标题:Pandas不同日期数据做计算

          本文链接:https://www.haomeiwen.com/subject/hswwaqtx.html