我有 1 分钟的股权数据如下;
bidopen bidhigh bidlow bidclose bidvolume
currencypair
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
我想添加一个额外的列。本专栏将:
- 从此时起取 15 条记录(包括当前时间)
- 从这 15 条记录中得到最大bidhigh和最小bidlow
- 计算高低之差并在新列中使用该值
我尝试了以下。首先,我读入了数据。
usecols = ['datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=0, usecols = usecols )
定义一个函数:
def lookaheadmaxmin(df):
df2=df[:15]
high=df2['bidhigh'].max(axis=1)
low=df2['bidlow'].min(axis=1)
return high-low
然后
df['newcolumn'] = map( lookaheadmaxmin, df[:15])
这个错误。我很确定地图中的 'df[:15]' 是问题所在,因为我不知道如何将当前和未来记录的一部分传递给函数
基本上我要做的是确定在 15 分钟的移动窗口内价格移动了多少,如下所示:
所以之间;16:00 - 16:15 - 价格变动了多少?将此放在 16:00 记录的列中
16:01 - 16:16 - 价格变动了多少?把它放在 16:01 记录的列中
16:02 - 16:17 - 价格变动了多少?将此放在 16:02 记录的列中
16:03 - 16:18 - 价格变动了多少?将此放在 16:03 记录的列中
16:04 - 16:19 - 价格变动了多少?把它放在 16:04 记录的列中
16:05 - 16:20 - 价格变动了多少?把它放在 16:05 记录的栏中
附加信息:
我正在为 Mac 使用 Enthought Canopy 版本 1.1.0(64 位)。Pandas 版本:版本:0.12.0-1(包含 numpy 1.7.1)
源数据样本:
currencypair,datetime,bidopen,bidhigh,bidlow,bidclose,askopen,askhigh,asklow,askclose,bidvolume,askvolume
GBPUSD,2007-03-30 16:01:00,1.96870,1.96900,1.96860,1.96860,1.96850,1.96880,1.96845,1.96850,877.40,1386.70
GBPUSD,2007-03-30 16:02:00,1.96860,1.96905,1.96860,1.96860,1.96850,1.96890,1.96840,1.96840,897.20,1272.30
GBPUSD,2007-03-30 16:03:00,1.96860,1.96900,1.96860,1.96900,1.96850,1.96890,1.96840,1.96880,1076.11,1333.30
GBPUSD,2007-03-30 16:04:00,1.96890,1.96910,1.96880,1.96900,1.96880,1.96890,1.96865,1.96880,849.70,765.10
GBPUSD,2007-03-30 16:05:00,1.96900,1.96900,1.96880,1.96890,1.96875,1.96890,1.96860,1.96870,1402.80,1240.90
GBPUSD,2007-03-30 16:06:00,1.96890,1.96890,1.96840,1.96860,1.96870,1.96870,1.96820,1.96850,769.50,1727.30
GBPUSD,2007-03-30 16:07:00,1.96860,1.96880,1.96820,1.96830,1.96850,1.96870,1.96810,1.96820,842.00,1865.60
GBPUSD,2007-03-30 16:08:00,1.96830,1.96930,1.96830,1.96910,1.96820,1.96920,1.96820,1.96890,1096.60,1197.70
GBPUSD,2007-03-30 16:09:00,1.96910,1.96920,1.96880,1.96890,1.96895,1.96910,1.96865,1.96880,368.60,432.10
作为旁注 - 记录的显示有些奇怪(我正在使用 ipython notebook )。即使我忽略了该'currencypair'
列,它也奇怪地显示为列标题。(我将其包括在内,因为我不知道它是否与其他无法正常工作的事情有关。)
导入数据(使用上面的 csv_read)(注意没有'currencypair'
命名列)
usecols = ['datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=0, usecols = usecols )
然后做
df[:5]
显示:(请注意,它显示'currencypair'
为列标题,但在df.info()
下方仅显示为'index'
)
bidopen bidhigh bidlow bidclose bidvolume
currencypair
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
df.info()
显示:
<class 'pandas.core.frame.DataFrame'>
Index: 2362159 entries, 2007-03-30 16:01:00 to 2013-09-02 18:59:00
Data columns (total 5 columns):
bidopen 2362159 non-null values
bidhigh 2362159 non-null values
bidlow 2362159 non-null values
bidclose 2362159 non-null values
bidvolume 2362159 non-null values
dtypes: float64(5)
以另一种方式导入数据
导入然后移除货币对列;(注意添加'currencypair'
然后删除列之后)
usecols = ['currencypair','datetime','bidopen','bidhigh','bidlow','bidclose','bidvolume']
df=pd.read_csv(path,parse_dates=('datetime'),index_col=1, usecols = usecols )
df=df.drop('currencypair',1)
显示:
bidopen bidhigh bidlow bidclose bidvolume
datetime
2007-03-30 16:01:00 1.9687 1.96900 1.9686 1.9686 877.40
2007-03-30 16:02:00 1.9686 1.96905 1.9686 1.9686 897.20
2007-03-30 16:03:00 1.9686 1.96900 1.9686 1.9690 1076.11
2007-03-30 16:04:00 1.9689 1.96910 1.9688 1.9690 849.70
2007-03-30 16:05:00 1.9690 1.96900 1.9688 1.9689 1402.80
并df.info()
显示:(注意索引现在显示为'DatetimeIndex'
)
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2362159 entries, 2007-03-30 16:01:00 to 2013-09-02 18:59:00
Data columns (total 5 columns):
bidopen 2362159 non-null values
bidhigh 2362159 non-null values
bidlow 2362159 non-null values
bidclose 2362159 non-null values
bidvolume 2362159 non-null values
dtypes: float64(5)