将函数应用于值和系列索引

时间:2013-08-30 08:47:42

标签: pandas

我发现自己将一个函数应用于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找不到任何建议更好的路线。有什么想法吗?

2 个答案:

答案 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)