我有数据框架--为了示例数据的目的,每天只有10分钟:
Date Close
0 2019-06-20 07:00:00 2927.25
1 2019-06-20 07:05:00 2927.00
2 2019-06-20 07:10:00 2926.75
183 2019-06-21 07:00:00 2932.25
184 2019-06-21 07:05:00 2932.25
185 2019-06-21 07:10:00 2931.00
366 2019-06-24 07:00:00 2941.75
367 2019-06-24 07:05:00 2942.25
368 2019-06-24 07:10:00 2941.50
549 2019-06-25 07:00:00 2925.50
550 2019-06-25 07:05:00 2926.50
551 2019-06-25 07:10:00 2926.50
732 2019-06-26 07:00:00 2903.25
我想要得到收盘价的每日范围。
我按天对数据进行分组,并得到收盘价的最小值和最大值:
rangeofday = df.groupby(pd.Grouper(key='Date', freq='1D')).agg({'Close':[np.min, np.max]})
rangeofday = rangeofday.dropna()
Close
amin amax
Date
2019-06-20 2926.75 2927.25
2019-06-21 2931.00 2932.25
2019-06-24 2941.50 2942.25
2019-06-25 2925.50 2926.50
2019-06-26 2903.25 2904.00
... ... ...
到目前为止还不错,但是发生的情况是列的名称很奇怪,而且不知为何不能通过名称访问。
rangeofday.amin
or
rangeofday.Closeamin
= 'DataFrame' object has no attribute 'amin'
这样我就可以用ILOC访问它们:
rangeofday.iloc[:, [1]]
Close
amax
Date
2019-06-20 2927.25
2019-06-21 2932.25
2019-06-24 2942.25
2019-06-25 2926.50
现在我试着从max中减去min:
rangeofday['range'] = (rangeofday.iloc[:, [0]] - rangeofday.iloc[:, [1]])/0.25
并得到错误:
Wrong number of items passed 2, placement implies 1
这意味着什么?如何绕过这个错误?
由于您应用了多个agg
函数,因此pandas
自动将一个multiindex
应用到您的分组框架。 详情请参阅https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
特别是,如果要访问列,可以通过将列名作为元组
传递来访问:
RangeOfDay[('clos','amax')]
或
RangeOfDay.loc[:,('clos','amin')]