【问题标题】:computing the percentage change in long panel dateset计算长面板数据集的百分比变化
【发布时间】:2018-07-24 09:18:19
【问题描述】:

我正在使用 .pct_change() 计算股票面板数据集中的百分比变化。

                     close  high     low  open     volume  t  interval  \
company date                                                             
arnc    2017-05-19  1.0900  1.09  1.0700  1.07    51450.0  0         1   
        2017-05-18  1.0700  1.12  1.0500  1.09    59094.0  0         1   
        2017-05-17  1.1200  1.15  1.1000  1.14    82340.0  0         1   
        2017-05-16  1.1500  1.18  1.1400  1.17    49186.0  0         1   
        2017-05-15  1.1700  1.18  1.1200  1.18   140224.0  0         1   
        2017-05-12  1.3000  1.65  1.1300  1.13  2016764.0  0         0   
        2017-05-11  1.1100  1.14  1.1000  1.13    11186.0  0         0   
        2017-05-10  1.1200  1.14  1.1100  1.11     7937.0  0         0   
        2017-05-09  1.1199  1.15  1.1000  1.13     4925.0  0         0   
        2017-05-08  1.1217  1.14  1.1208  1.14    16878.0  0         0   
dan     2017-05-19  1.0900  1.09  1.0700  1.07    51450.0  0         1   
        2017-05-18  1.0700  1.12  1.0500  1.09    59094.0  0         1   
        2017-05-17  1.1200  1.15  1.1000  1.14    82340.0  0         1   


df['pct_change'] = df.open.pct_change()

但是,我发现 pandas 并没有放弃第一个观察值,而是根据前一家公司的最后一次观察值计算一家公司的第一个百分比变化。

如何避免这种情况并让 pandas 放弃每家公司的第一个 ob?

【问题讨论】:

    标签: python pandas percentage stock


    【解决方案1】:

    看来需要:

    df['pct_change'] = df.groupby(level=0).open.transform(lambda x: x.pct_change())
    
    print (df)
                         close  high     low  open     volume  t  interval  \
    company date                                                             
    arnc    2017-05-19  1.0900  1.09  1.0700  1.07    51450.0  0         1   
            2017-05-18  1.0700  1.12  1.0500  1.09    59094.0  0         1   
            2017-05-17  1.1200  1.15  1.1000  1.14    82340.0  0         1   
            2017-05-16  1.1500  1.18  1.1400  1.17    49186.0  0         1   
            2017-05-15  1.1700  1.18  1.1200  1.18   140224.0  0         1   
            2017-05-12  1.3000  1.65  1.1300  1.13  2016764.0  0         0   
            2017-05-11  1.1100  1.14  1.1000  1.13    11186.0  0         0   
            2017-05-10  1.1200  1.14  1.1100  1.11     7937.0  0         0   
            2017-05-09  1.1199  1.15  1.1000  1.13     4925.0  0         0   
            2017-05-08  1.1217  1.14  1.1208  1.14    16878.0  0         0   
    dan     2017-05-19  1.0900  1.09  1.0700  1.07    51450.0  0         1   
            2017-05-18  1.0700  1.12  1.0500  1.09    59094.0  0         1   
            2017-05-17  1.1200  1.15  1.1000  1.14    82340.0  0         1   
    
                        pct_change  
    company date                    
    arnc    2017-05-19         NaN  
            2017-05-18    0.018692  
            2017-05-17    0.045872  
            2017-05-16    0.026316  
            2017-05-15    0.008547  
            2017-05-12   -0.042373  
            2017-05-11    0.000000  
            2017-05-10   -0.017699  
            2017-05-09    0.018018  
            2017-05-08    0.008850  
    dan     2017-05-19         NaN  
            2017-05-18    0.018692  
            2017-05-17    0.045872  
    

    【讨论】:

    • 谢谢!当周末没有交易时会发生什么? Python 只是在前一个数据点(星期五?)上运行 pct_change。另外,我注意到,它不是返回 NaN,而是为公司/时间序列的第一个值返回 0,这怎么可能?
    • 另外,不知道为什么,但它会为每个公司日观察创建一个副本
    • @FilippoSebastio - 第一个问题需要df['pct_change'] = df.groupby(level=0).open.transform(lambda x: x.pct_change()).fillna(0) 和第二个因为每组相同的数据(在open 列中的样本中)
    • 感谢 Jezrael,我不确定我是否理解“每组数据相同”的含义以及如何避免这种情况?
    • @FilippoSebastio - 我认为这是与数据相关的问题,open 中的值是 1.07, 1.09, 1.14。为什么不知道,也许arncdan 可能是同一家公司?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多