【发布时间】:2017-12-27 16:06:09
【问题描述】:
采用以下具有小漂移的正态分布术语的DataFrame:
np.random.seed(123)
df = pd.DataFrame(np.random.randn(60,3) / 100 + 0.005,
index=pd.date_range(end='2017-06-30', periods=60, freq='M'))
并定义将应用于列的函数rollup:
def rollup(r):
return r.add(1.).prod() -1.
例如,调用整个 df 给我:
print(rollup(df))
0 0.17411
1 0.35658
2 0.24944
dtype: float64
但我想做的是从df 的索引中的最终日期偏移一个日期,并将rollup 应用于该子帧。我正确地做到了这一点,如下所示,但想知道是否有使用更少行的替代方法。
from pandas.tseries.offsets import DateOffset
end = df.index[-1]
start = end - DateOffset(years=2)
print(df[start:end].apply(rollup))
0 0.07905
1 0.18037
2 0.09656
dtype: float64
# example 2
start = end - DateOffset(months=6)
print(df[start:end].apply(rollup))
0 0.01656
1 0.06585
2 0.01463
dtype: float64
这最后一段代码可以压缩吗? Time Series / Date functionality 中是否有另一种方法不需要我指定end,应用DateOffset,然后在两者之间索引df?
如果这是需要最少代码的最直接的方法,那对我来说本身就是一个答案。
【问题讨论】:
标签: python python-3.x pandas datetime time-series