为什么我的熊猫 rolling().apply() 在系列包含集合时不起作用?



我有一个panda系列,其中每个单元格都是一个元组。我正在尝试对该系列执行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

一个简单的apply按预期工作,因为该函数被调用:

>>> s.apply(die)
[...]
ZeroDivisionError: integer division or modulo by zero

但是rolling().apply()什么都不做,尤其是应该应用的函数永远不会被调用:

>>> s.rolling(2).apply(die)
0    (0, 0)
1    (1, 1)
2    (2, 2)
3    (3, 3)
4    (4, 4)
dtype: object

这是一个最简单的例子,展示了我所说的内容,但同样的事情也发生在set&列表。

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

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

最新更新