【发布时间】:2020-10-19 14:07:44
【问题描述】:
我是 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-close 到 2010-01-05 9:16-open 的值为 0,因为 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
【问题讨论】:
-
您好,欢迎来到 stackoverflow。你的意思是你想比较最早的“开盘”和最晚的“收盘”吗?最好将预期的输出添加到您的问题中,以便于理解您的问题。
-
嗯,我想得到一天最近收盘价和第二天最早开盘价的百分比变化。抱歉,请用需要什么样的输出来编辑我的问题
-
@Fudgster 日期是否总是在您的数据框中排序?
-
yes shubham 它的股票数据,所以它总是排序的
-
@Fudgster 那么替代解决方案应该是可能的。
标签: python-3.x pandas time-series