gpt4 book ai didi

python-3.x - Pandas 时间序列的百分比变化

转载 作者:行者123 更新时间:2023-12-02 02:46:56 25 4
gpt4 key购买 nike

我是 Python 的新手,通过一些基本的股票数据分析来学习它。下面是我正在使用的数据框

                      date      open      high  ...       close  volume 
0 2010-01-05 09:16:00 5282.00 5283.10 ... 5281.10 94700 NaN
1 2010-01-05 12:16:00 5281.60 5281.60 ... 5278.30 49100 NaN
2 2010-01-05 16:16:00 5278.50 5280.50 ... 5278.80 62550 NaN
3 2010-01-06 09:16:00 5278.80 5279.45 ... 5277.30 64850 NaN
4 2010-01-06 12:16:00 5277.95 5278.00 ... 5276.00 65251 NaN

如您所见,它是一个时间序列,一天内有不同的时间段。所以我想找到 2010-01-06 09:16:00 的 prtc_change(百分比变化)打开与 2010-01-05 16:16:00。我该如何计算?

这是我正在寻找的输出类型:

                      date      open      high  ...       close  volume %change
0 2010-01-05 09:16:00 5282.00 5283.10 ... 5281.10 94700
1 2010-01-05 12:16:00 5281.60 5281.60 ... 5278.30 49100
2 2010-01-05 16:16:00 5278.50 5280.50 ... 5278.80* 62550
3 2010-01-06 09:16:00 5278.80* 5279.45 ... 5277.30 64850 0
4 2010-01-06 12:16:00 5277.95 5278.00 ... 5276.00 65251

%change 列的 2010-01-05 为 0 - 接近 2010-01-05 9:16 - 打开,因为open = close (5278.80 == 5278.80)(标有*)。

注意:我在处理数据时对数据进行了一些操作。下面是代码

import pandas as pd
import datetime

df = pd.read_csv(r'C:\Users\Admin\Desktop\Python files\nifty.txt' , sep = ';' , names = ["dates","open","high","low","close","volume"])
## fomration the date and time
df['dates'] = pd.to_datetime(df['dates'].astype(str) , format='%Y%m%d %H%M%S' )
## splitting the datetime column into date and time
df['date'] = [d.date() for d in df['dates']]
df['time'] = [d.time() for d in df['dates']]

当前数据框看起来像:

                     dates      open      high  ...  volume        date      time
0 2010-01-05 09:16:00 5282.00 5283.10 ... 94700 2010-01-05 09:16:00
1 2010-01-05 12:16:00 5281.60 5281.60 ... 49100 2010-01-05 12:16:00
2 2010-01-05 16:16:00 5278.50 5280.50 ... 62550 2010-01-05 16:16:00
3 2010-01-06 09:16:00 5278.80 5279.45 ... 64850 2010-01-05 09:16:00
4 2010-01-06 12:16:00 5277.95 5278.00 ... 65251 2010-01-05 12:16:00

最佳答案

Pandas 具有 pct_change 函数,但它会计算百分比变化在源 Series 的连续元素之间,或对于源 DataFrame 中的数字类型。

所以在你的情况下它是无用的,你需要一种不同的方法:

  1. 第一步是找到每天的第一个开盘价和最后一个收盘价:

     days = df.groupby(df.date.dt.date).agg({'open': 'first', 'close': 'last'})
  2. 然后,计算百分比变化:

     100 * (days.open - days.close.shift()) / days.open

详细信息:

  • days.open - 从当天开始最早开放。
  • days.close.shift() - 前一天的最新收盘价。
  • 100 * ... - 将结果表示为百分比数。

第二步是将这些数据与原始DataFrame“join”(创建一个新列):

  1. 定义一个函数,计算特定日期的一组行的 %change 列:

     def pctChg(grp):
    rv = pd.Series('', index=grp.index)
    chg = days.pct.asof(grp.iloc[0, 0])
    if pd.notnull(chg): rv.iloc[0] = chg
    return rv
  2. 然后创建新列:

     df['%change'] = df.groupby(df.date.dt.date)\
    .apply(pctChg).reset_index(level=0, drop=True)

关于python-3.x - Pandas 时间序列的百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62637658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com