我发现自己将一个函数应用于TimeSeries的值和索引。我这样做的方法是构建值的DataFrame和TimeSeries的索引,然后将函数应用于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)
我有一种潜在的怀疑,认为这不是解决这个问题的最优雅/最有效的方法,但在docs找不到任何建议更好的路线。有什么想法吗?
答案 0 :(得分: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
- 属性访问数据框元素的索引。
答案 1 :(得分:0)
这是一种更有效的解决方案
s = Series(np.arange(500), index=dates)
(s/4).where(s.index.month % 3 == 1, 0)