0

我发现自己将函数应用于 TimeSeries 的值和索引。我这样做的方法是构建一个包含 TimeSeries 的值和索引的 DataFrame,然后将一个函数应用于 DataFrame。

# imports
import pandas as pd
import numpy as np

# Set up some input time series
dates = pd.date_range('2012-04-01', periods=500,freq='MS')
ts = pd.Series(np.arange(500), index=dates)

# Build data frame of values and index
tmp = pd.concat([ts, ts.index.to_series()], join='outer', axis=1)

# Example function to apply
f = lambda x: x[0] / 4 if x[1].month % 3 == 1 else 0

# Apply function
out = tmp.apply(f, axis=1)

我有一个偷偷摸摸的怀疑,这不是解决这个问题的最优雅/最有效的方法,但在文档中找不到任何建议更好的路线。有任何想法吗?

4

2 回答 2

0

您可以使用 DataFrame 至少更优雅一点,如下所示

ts = pd.DataFrame({ "data": np.arange(500) }, index=dates)
f = lambda x: x["data"] / 4 if x.name.month % 3 == 1 else 0
ts.apply(f, axis=1)

您可以使用name-property 访问数据框元素的索引。

于 2013-08-30T09:02:30.337 回答
0

这是一个更有效的解决方案

s = Series(np.arange(500), index=dates)
(s/4).where(s.index.month % 3 == 1, 0)
于 2013-08-30T12:58:00.310 回答