gpt4 book ai didi

python - 使用 DateOffset 对 pandas DataFrame 进行索引和应用 func

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:27 25 4
gpt4 key购买 nike

采用以下具有小漂移的正态分布项的 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

如果这是需要最少代码的最直接方法,那么对我来说这本身就是一个答案。

最佳答案

首先,我想说你的代码非常简洁。我将提出以下观察和建议:

您的索引是以'M' 频率创建的,并且会延续到每个单独的时间戳。这意味着这些对象现在知道如何处理整数的加法和减法。 pandas 所做的是假设整数采用由频率表示的偏移量。

示例

df.index[-1]

Timestamp('2017-06-30 00:00:00', freq='M')

df.index[-1] - 2

Timestamp('2017-04-30 00:00:00', freq='M')

我们可以用它来实现您的目标

rollup(df[df.index[-1] - 2:])  # last 2 months

还有

rollup(df[df.index[-1] - 24:])  # last 2 years
<小时/>

额外积分

这个数学也适用于整个索引。

df.index + 2

为每个指数值添加两个月。

关于python - 使用 DateOffset 对 pandas DataFrame 进行索引和应用 func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45240463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com