【发布时间】:2020-10-30 04:52:51
【问题描述】:
我有数据框——为了示例数据,每天只有 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
现在我尝试从最大值中减去最小值:
rangeofday['range'] = (rangeofday.iloc[:, [0]] - rangeofday.iloc[:, [1]])/0.25
并得到错误:
Wrong number of items passed 2, placement implies 1
这是什么意思,如何解决这个错误?
【问题讨论】:
-
这是一个多索引:pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html,例如
rangeofday.loc[:, ('Close', 'amin')] -
@r.ook 这很有帮助,而且有效!谢谢
-
我应该在问题解决后删除问题吗?
-
我现在发布了我的解决方案作为答案。您可以通过接受当前解决方案来结束问题。如果有更好的答案出现,请随时接受最有帮助的答案。