我希望使用 pandas 的 resampling 函数,但要应用自定义的函数。我遇到的问题是自定义函数返回一个 pandas 数据帧而不是单个数组。
以下示例说明了我的问题:
如果我现在应用我的函数
以下示例说明了我的问题:
>>> import pandas as pd
>>> import numpy as np
>>> def f(data):
... return ((1+data).cumprod(axis=0)-1)
...
>>> data = np.random.randn(1000,3)
>>> index = pd.date_range("20170101", periods = 1000, freq="B")
>>> df = pd.DataFrame(data= data, index =index)
假设我想将工作日重新采样为商业月末频率:
>>> resampler = df.resample("BM")
如果我现在应用我的函数
f
,我得不到期望的结果。我想要从f
的输出中获取最后一行。>>> resampler.apply(f)
这是因为我的函数 f
中的 cumprod
返回了一个 pandas 数据帧。我可以编写我的 f
函数,使其仅返回最后一行。然而,我还想在其他地方使用该函数来返回整个数据帧。这可以通过在函数 f
中引入一个标志(例如 "last_row")来解决,该标志控制是返回完整数据帧还是仅返回最后一行。但是,这种解决方案似乎有些麻烦。