gpt4 book ai didi

python - 在使用 pandas 进行上采样时,将总和平均分配给更高的采样时间段

转载 作者:太空狗 更新时间:2023-10-29 21:46:20 26 4
gpt4 key购买 nike

我试图将一个时间段的总和平均分配给较高采样时间段的组成部分。

我做了什么:

>>> rng = pandas.PeriodIndex(start='2014-01-01', periods=2, freq='W')
>>> ts = pandas.Series([i+1 for i in range(len(rng))], index=rng)
>>> ts
2013-12-30/2014-01-05 1
2014-01-06/2014-01-12 2
Freq: W-SUN, dtype: float64

>>> ts.resample('D')
2013-12-30 1
2013-12-31 NaN
2014-01-01 NaN
2014-01-02 NaN
2014-01-03 NaN
2014-01-04 NaN
2014-01-05 NaN
2014-01-06 2
2014-01-07 NaN
2014-01-08 NaN
2014-01-09 NaN
2014-01-10 NaN
2014-01-11 NaN
2014-01-12 NaN
Freq: D, dtype: float64

我真正想要的是:

>>> ts.resample('D', some_miracle_thing)
2013-12-30 1/7
2013-12-31 1/7
2014-01-01 1/7
2014-01-02 1/7
2014-01-03 1/7
2014-01-04 1/7
2014-01-05 1/7
2014-01-06 2/7
2014-01-07 2/7
2014-01-08 2/7
2014-01-09 2/7
2014-01-10 2/7
2014-01-11 2/7
2014-01-12 2/7
Freq: D, dtype: float64

有什么办法吗

  1. 具体来说——例如,使用 x/7 lambda 函数?
  2. 一般来说,它独立于因子 7(比如 24 小时到天等等)?

最佳答案

有点费解,但这行得通吗?

首先,当您重新采样时,添加一个 .groupby(level=0) 以便保留原始时间戳。 (基于此 answer )

rs = ts.groupby(level=0).resample('D')

然后在 MultiIndex 的第一层应用一个 groupby 来应用你想要的操作。

In [285]: rs.groupby(level=0).transform(lambda x: x.iloc[0] / float(len(x)))
Out[285]:
2013-12-30/2014-01-05 2013-12-30 0.142857
2013-12-31 0.142857
2014-01-01 0.142857
2014-01-02 0.142857
2014-01-03 0.142857
2014-01-04 0.142857
2014-01-05 0.142857
2014-01-06/2014-01-12 2014-01-06 0.285714
2014-01-07 0.285714
2014-01-08 0.285714
2014-01-09 0.285714
2014-01-10 0.285714
2014-01-11 0.285714
2014-01-12 0.285714
dtype: float64

关于python - 在使用 pandas 进行上采样时,将总和平均分配给更高的采样时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204504/

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