我有一个大熊猫系列,其中每个细胞都是一个元组。我正在尝试对该系列执行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
这是演示我正在谈论的内容的最简单的例子,但同样的事情发生在套装&名单。
为什么会发生这种情况,如何在一系列集合中使用自定义函数进行滚动应用?
答案 0 :(得分:1)
这不起作用,因为pandas.DataFrame.rolling函数返回一个Window或Rolling子类,用于特定操作,而pandas.DataFrame.apply 沿DataFrame的输入轴应用函数。如ayhan所述,在this帖子中。