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

我做了什么:

>>> 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

有办法吗
  • 具体来说-例如,使用x/7 lambda函数?
  • 通常,它是否独立于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
    

    10-02 08:27
    查看更多