gpt4 book ai didi

python - pandas roll_apply 处理 pandas.TimeGrouper 等对象类型

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:37 25 4
gpt4 key购买 nike

相关于Fun with Pandas `rolling_apply` and TypeErrorUsing rolling_apply on a DataFrame object

假设 F 是一个返回函数的函数,df 是一个带有日期时间索引的 Series。

以下似乎有效:

df.groupby(pandas.TimeGrouper('10d')).apply(F)

虽然以下结果会导致 TypeError,因为 moving_apply 似乎期望 float 作为返回值。

pandas.rolling_apply(df, 10, F)

我实际上想要后者,因为我想按 10 天可用天的每个窗口进行分组,而不是像我认为的 TimeGrouper 那样按每个 10 天窗口的可用数据进行分组。

有没有直接的方法可以使用其他函数来做到这一点?

举一个具体的例子,这似乎有效:

from statsmodels.tools.tools import ECDF
s = pandas.Series(randn(1000))
s.index = pandas.date_range('2012-01-01', periods=s.shape[0], freq='D')
f = s.groupby(pandas.TimeGrouper('30D')).apply(ECDF)
f.apply(lambda x: x(0.1)).head()

最佳答案

好吧,这是一个黑客,但你至少可以像这样实现你的目标:

import numpy as np
import pandas as pd
from statsmodels.tools.tools import ECDF

s = pd.Series(np.random.randn(1000))
s.index = pd.date_range('2012-01-01', periods=s.shape[0], freq='D')
result = []
pd.rolling_apply(s, 10, lambda grp: result.append(ECDF(grp)) or 1)
print([f(0.1) for f in result])

lambda 函数

lambda grp: result.append(ECDF(grp)) or 1

将 ECDF 存储在结果列表中。由于 result.append 返回 None,因此表达式 result.append(ECDF(grp)) or 1 解析为数值 1,因此 pd.rolling_apply 不会引发错误。

关于python - pandas roll_apply 处理 pandas.TimeGrouper 等对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com