【问题标题】:How to use Pandas Dataframe time series for shifting certain weekdays如何使用 Pandas Dataframe 时间序列来移动某些工作日
【发布时间】:2022-12-11 15:04:13
【问题描述】:

我从另一个数据框创建了一个数据框,该数据框在一列中标记了我想要对应于星期一、星期三和星期五的行,但是当我使用 shift() 函数时,事实证明它每天都在使用班次,这使得值成为 NaN,我想知道的是如何使转换从一行到另一行而不是每天。

这是有问题的源代码

print(data)
data2=data[(data['Shapes'])==1]
rango= pdta.sma(((data2.high/data2.low)-1)*100,3)
data3 = data2[((((1-(data2.close/data2.shift().close))*100>1.73) | ((1-(data2.close/data2.shift().close))*100<-2) | ((1-(data2.high/data2.shift().close))*100>1.73) | ((1-(data2.low/data2.shift().close))*100<-2))) & (rango>2.3)] 
data4= data2[((((1-(data2.close/data2.shift().close))*100<1.73) & ((1-(data2.close/data2.shift().close))*100>-2)) ) & (rango>2.3) ] 
data3['tasa']=abs((1-(data2.close/data2.shift().close))*100)
data4['tasa']=abs((1-(data2.close/data2.shift().close))*100)
data3['acc']=data3['tasa'].cumsum()
print(data2)
print(data3)`

这是结果: `

                        open     high      low    close  Shapes          MA  Smoothing Line       MA.1  Smoothing Line.1   DIVATR2         CCI  Smoothing Line.2
time
2017-01-03 14:30:00  2251.57  2258.21  2251.57  2255.44       0         NaN             NaN        NaN               NaN       NaN         NaN               NaN
2017-01-03 15:00:00  2255.61  2263.88  2255.06  2261.02       0         NaN             NaN        NaN               NaN       NaN         NaN               NaN
2017-01-03 15:30:00  2261.00  2262.10  2252.22  2252.41       0         NaN             NaN        NaN               NaN       NaN         NaN               NaN
2017-01-03 16:00:00  2252.36  2253.35  2249.60  2250.37       0         NaN             NaN        NaN               NaN       NaN         NaN               NaN
2017-01-03 16:30:00  2250.40  2252.07  2245.13  2249.39       0         NaN             NaN        NaN               NaN       NaN         NaN               NaN
...                      ...      ...      ...      ...     ...         ...             ...        ...               ...       ...         ...               ...
2022-12-09 19:00:00  3960.68  3961.14  3952.03  3960.05       0  3986.50310      3986.31346  3996.7810        3996.51992  0.293032  -68.912218          8.005767
2022-12-09 19:30:00  3960.02  3961.69  3956.90  3959.41       0  3986.48670      3986.39973  3996.3626        3996.54408  0.280787  -41.917769        -20.399909
2022-12-09 20:00:00  3959.34  3963.45  3955.64  3955.86       0  3986.47505      3986.45415  3995.5790        3996.38820  0.275066  -56.233991        -45.654498
2022-12-09 20:30:00  3955.87  3956.69  3933.04  3934.23       0  3986.39425      3986.45894  3994.5682        3995.99582  0.299761 -260.084829        -90.251416
2022-12-09 21:00:00  3934.12  3934.39  3934.12  3934.39       1  3986.26665      3986.42515  3993.3376        3995.32568  0.278829 -276.147235       -140.659208

[20878 rows x 12 columns]
                        open     high      low    close  Shapes          MA  Smoothing Line       MA.1  Smoothing Line.1   DIVATR2         CCI  Smoothing Line.2
time
2017-01-04 21:00:00  2270.53  2270.76  2270.53  2270.75       1         NaN             NaN        NaN               NaN  0.145114   64.620644         75.006245
2017-01-06 21:00:00  2277.24  2277.24  2276.98  2276.98       1         NaN             NaN        NaN               NaN  0.126855   41.738705         78.922137
2017-01-09 21:00:00  2269.25  2269.25  2268.90  2268.90       1         NaN             NaN        NaN               NaN  0.115889 -118.908149        -98.767371
2017-01-11 21:00:00  2275.02  2275.32  2275.02  2275.32       1         NaN             NaN        NaN               NaN  0.174151  165.609240         54.106043
2017-01-13 21:00:00  2274.46  2274.65  2274.46  2274.64       1         NaN             NaN  2271.1504        2271.07704  0.128030   32.828518         32.600888
...                      ...      ...      ...      ...     ...         ...             ...        ...               ...       ...         ...               ...
2022-11-30 21:00:00  4079.12  4080.11  4079.09  4080.11       1  3963.37310      3960.63277  3981.7931        3979.40142  0.361624  181.607304        281.533128
2022-12-02 21:00:00  4071.77  4071.77  4071.60  4071.71       1  3990.01935      3988.94737  4012.4374        4010.60396  0.309442   55.100845         21.840368
2022-12-05 21:00:00  3998.76  3998.90  3998.76  3998.83       1  3991.78010      3991.64513  4013.1131        4013.49406  0.296790  -74.538220       -110.714108
2022-12-07 21:00:00  3933.33  3933.93  3933.33  3933.93       1  3984.53130      3984.87922  3994.4473        3995.03058  0.314408  -15.671273        -50.104231
2022-12-09 21:00:00  3934.12  3934.39  3934.12  3934.39       1  3986.26665      3986.42515  3993.3376        3995.32568  0.278829 -276.147235       -140.659208

[877 rows x 12 columns]

我期望的是转换会从一行跳到另一行,每一行都将在星期一、星期三或星期五,而其他日子将被跳过。

【问题讨论】:

    标签: python filtering weekday


    【解决方案1】:

    Pandas shift() 函数有一个名为 freq 的参数,它允许您进行基于频率的移动。 Pandas shift() 函数在处理时间序列数据时很有用。

    为了使用参数 freq,您需要确保 DataFrame 的索引是日期或日期时间,否则会引发 NotImplementedError。

    让我们借助示例看看它是如何工作的。

    df = pd.DataFrame({
        "A": [1, 2, 3, 4, 5],
        "B": [10, 20, 30, 40, 50]
    },  
    index=pd.date_range("2020-01-01", freq='D', periods=5)
    

    )

    将指数移动 10 天。

    df.shift(freq='10D')
    

    相当于

    df.shift(periods=10, freq='D')

    【讨论】:

    • 我知道,但由于星期一、星期三和星期五的天数不同,所以很复杂。
    猜你喜欢
    • 2022-01-25
    • 2014-10-25
    • 2022-12-05
    • 2016-07-08
    • 1970-01-01
    • 2012-06-14
    • 2016-11-04
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多