当系列包含集合时,为什么我的pandas rolling().apply()不起作用?

Dav*_*vid 8 python pandas

我有一个大熊猫系列,其中每个细胞都是一个元组.我正在尝试对该系列执行rolling().apply(),而我正在尝试应用的函数永远不会被调用.这是一个愚蠢的例子,显示了我在说什么:

>>> import pandas as pd
>>> pd.__version__
u'0.18.0'
>>> die = lambda x: 0/0

>>> s = pd.Series(zip(range(5), range(5)))
>>> s
0    (0, 0)
1    (1, 1)
2    (2, 2)
3    (3, 3)
4    (4, 4)
dtype: object
Run Code Online (Sandbox Code Playgroud)

一个简单的apply工作正如预期的那样,函数被调用:

>>> s.apply(die)
[...]
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)

但是a rolling().apply()根本没有做任何事情,特别是应该应用的函数永远不会被调用:

>>> s.rolling(2).apply(die)
0    (0, 0)
1    (1, 1)
2    (2, 2)
3    (3, 3)
4    (4, 4)
dtype: object
Run Code Online (Sandbox Code Playgroud)

这是演示我正在谈论的最简单的例子,但是套件和列表也是如此.

为什么会发生这种情况,如何在一系列集合中使用自定义函数进行滚动应用?

2Ob*_*Obe 1

这将不起作用,因为pandas.DataFrame.rolling函数返回 特定操作的 Window 或 Rolling 子类,而pandas.DataFrame.apply 沿 DataFrame 的输入轴应用函数。正如 ayhan 在这篇文章中提到的。