【问题标题】:'Wrong number of items passed 2, placement implies 1' error with pandas dataframe by operating two columns通过操作两列,pandas 数据框的“错误数量通过 2,位置意味着 1”错误
【发布时间】: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 这很有帮助,而且有效!谢谢
  • 我应该在问题解决后删除问题吗?
  • 我现在发布了我的解决方案作为答案。您可以通过接受当前解决方案来结束问题。如果有更好的答案出现,请随时接受最有帮助的答案。

标签: python pandas dataframe


【解决方案1】:

由于您应用了多个agg 函数,pandas 自动将MultiIndex 应用到您的分组框架。查看更多详情:https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html

特别是,如果要访问列,可以通过将列名作为tuple 传递来访问:

rangeofday[('Close', 'amax')]

rangeofday.loc[:, ('Close', 'amin')]

【讨论】:

    猜你喜欢
    • 2022-07-19
    • 1970-01-01
    • 2018-11-03
    • 2019-05-17
    • 2023-03-24
    • 2022-01-13
    • 2016-02-14
    • 2020-09-17
    • 2019-03-19
    相关资源
    最近更新 更多