【问题标题】:Calculating autocorrelation for each column of data in Pandas计算 Pandas 中每列数据的自相关
【发布时间】:2021-02-18 01:32:16
【问题描述】:

我想为我的数据的每一列计算 pandas 中的一阶自相关。

我希望以下每个代码都给出相同的结果,但结果不一样。

我应该使用哪一个?

df[df.columns.to_list()].apply(lambda x: x.corr(x.shift()))

df[df.columns.to_list()].apply(lambda x: x.autocorr)

【问题讨论】:

    标签: python pandas dataframe autocorrelation


    【解决方案1】:

    第二个应该是df[df.columns.to_list()].apply(lambda x: x.autocorr()),因为您需要内括号来调用autocorr 函数。

    这些 sn-ps 应该给出完全相同的结果,因为 autocorr 的实现是 1 行代码:self.corr(self.shift(lag)) 这与您的第一个 sn-p 相同。

    如果这仍然不起作用,请与可重现的示例分享您的数据。

    作为辅助说明 - 使用 df[df.columns.to_list()] 并没有做任何特别的事情,因为您没有创建数据的子集,因此您只需执行 df.apply 并跳过 df[df.columns.to_list()]

    【讨论】:

    • 感谢您的回复。实际上,当我添加括号时,现在显示的结果与方法相同。为什么代码在没有括号的情况下仍然可以运行?
    • 代码运行是因为,在 python 中,函数是对象。所以x.autocorr 只是获取附加到对象xpd.Series 对象)的函数autocorr。现在这个函数本身也是一个对象——如果你不添加括号,这就是返回的内容。您需要为call 函数加上括号,并使其实际执行您期望的操作。
    • 你能告诉我为什么在下面的链接中,“在第一个答案中”,pd.Series.pct_change 没有括号吗?当我添加括号时它甚至都不起作用!!!我在理解这个概念时缺少什么? stackoverflow.com/a/54322406/14138454
    • 是的,这是将函数作为对象传递的一个很好的例子。本质上,函数调用被延迟,以便groupby 操作可以为其提供参数。虽然这不是 pandas 特有的,但您可以阅读更多关于 passing a function as an object
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2016-06-02
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多