【问题标题】:Key error, parse error using *.agg method关键错误,使用 *.agg 方法解析错误
【发布时间】:2020-12-12 05:28:51
【问题描述】:

假设我有一个股票价格的数据框,其中“开盘”列是第 0 列,“收盘”列是第 3 列。进一步假设我想找到收盘价和开盘价之间的最大差异。无需使用agg 方法即可轻松完成,但让我来说明一下使用它们时的错误。

def daily_value(df):
    df.iloc[:, 0] = df.iloc[:,3] - df.iloc[:, 0]
    return df.max()

def daily_value(df):
    df['Open'] = df['Close'] - df['Open']
    return df.max()

两者都用于替换第 0 列,即“打开”,并返回打开和关闭之间的最大差值。
当我有 df1 并输入 daily_value(df1) 时,这工作正常。

但是,当我尝试df1.agg(daily_value) 时,两个版本都失败了。第一个说IndexingError: Too many indexers,而后者说KeyError: Close

如果我确实需要将函数传递给 *.agg 方法,我该怎么做?

非常感谢!

【问题讨论】:

    标签: pandas datetime time-series


    【解决方案1】:

    您需要提供轴。聚合函数调用需要轴。你应该用

    调用你的函数
    df1.agg(daily_value, axis=1)
    
    

    【讨论】:

    • 感谢您的回答,但很抱歉,axis = 1 是沿每一行聚合的。我的数据在列中,所以我应该使用 axis=0 沿每一列聚合。但是当我尝试它时,它也不起作用。
    【解决方案2】:

    您不必使用具有功能的 agg 方法,我低估了您在创建新列后试图获得 2 列之间的最大差异,您可以使用 df.agg({'Column name' : '最大限度'} 看下面的例子:

    【讨论】:

    • 确实如此。谢谢。我在我的问题中确实说明了这个简单的计算不需要 .agg 方法。但是假设我真的需要使用它,即必须使用df.agg(daily_value)。如何让它发挥作用?
    【解决方案3】:

    1- 将 df 分配给 return 而不是 df.max() 2-将 max 作为 agg 关键字传递并在打印中调用该函数以检查结果,如下所示 打印(daily_value(df1.agg('max')))

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2014-04-02
      • 2011-10-26
      • 2014-09-02
      • 1970-01-01
      相关资源
      最近更新 更多