我在数据框中每五分钟就有30个证券的开盘价,最高价,最低价,收盘价的数据框。这是一个示例:
Close High Low Open Symbol
2015-03-18 14:05:00 75.99 75.99 75.73 75.76 DD
2015-03-18 14:05:00 82.82 82.85 82.55 82.55 WMT
2015-03-18 14:05:00 25.72 25.72 25.62 25.64 GE
2015-03-18 14:05:00 61.94 61.95 61.62 61.62 JPM
2015-03-18 14:10:00 26.72 26.72 26.62 26.64 GE
2015-03-18 14:10:00 62.94 62.95 62.62 62.62 JPM
2015-03-18 14:10:00 83.82 83.85 83.55 83.55 WMT
2015-03-18 14:10:00 73.99 73.99 73.73 73.76 DD
我想在每个时间戳中为每个符号取Open值,然后从该符号的前一个时间戳的Close中减去它们,以便测量间隙。例如,我会将DD的14:10带时间戳的Open值从DD的14:05带时间戳的Close值中减去。
我找到了统一的数据解决方案,即如果这个数据帧只用于一个符号,但是假设我在这个数据帧中有30个符号,那么计算这个'Gap'值的最佳方法是什么?
谢谢,
CJ
答案 0 :(得分:0)
你可以groupby
开启'符号'然后调用apply
传递lambda并使用shift
:
In [147]:
df.groupby('Symbol').apply(lambda x: x['Open'] - x['Close'].shift())
Out[147]:
index 2015-03-18 14:05:00 2015-03-18 14:10:00
Symbol
DD NaN -2.23
GE NaN 0.92
JPM NaN 0.68
WMT NaN 0.73
修改强>
要将此列添加为新列,您可以按上述方式进行分组,并在感兴趣的2列上调用transform
并索引'关闭'柱。 tranform
返回与原始df对齐的系列:
In [19]:
df['New_col'] = df.groupby('Symbol')[['Open','Close']].transform(lambda x: x['Open'] - x['Close'].shift())['Close']
df
Out[19]:
Close High Low Open Symbol New_col
index
2015-03-18 14:05:00 75.99 75.99 75.73 75.76 DD -2.23
2015-03-18 14:05:00 82.82 82.85 82.55 82.55 WMT 0.73
2015-03-18 14:05:00 25.72 25.72 25.62 25.64 GE 0.92
2015-03-18 14:05:00 61.94 61.95 61.62 61.62 JPM 0.68
2015-03-18 14:10:00 26.72 26.72 26.62 26.64 GE 0.92
2015-03-18 14:10:00 62.94 62.95 62.62 62.62 JPM 0.68
2015-03-18 14:10:00 83.82 83.85 83.55 83.55 WMT 0.73
2015-03-18 14:10:00 73.99 73.99 73.73 73.76 DD -2.23