我使用pandas
中的Python
库,试图将某些数据从每月值上采样到每日值。有没有办法将价值平均分配给产生的“孩子”?
例如,假设我在一月和二月都行驶了100公里:
In[1]: distPerMonth = pd.Series([100, 100], index=pd.PeriodIndex(['2019-01', '2019-02'], freq='M'))
In[2]: distPerMonth
Out[2]:
2019-01 100
2019-02 100
Freq: M, dtype: int64
现在我想计算每天多少,从
开始In[3]: distPerMonth.resample('D')....
应导致
Out[3]:
2019-01-01 3.225806451612903
2019-01-02 3.225806451612903
...
2019-02-27 3.5714285714285716
2019-02-28 3.5714285714285716
Freq: M, dtype: float64
(2月份的值比1月份的值高,因为我在短短的几天内行驶了相同的距离。)
我正在寻找的是一种将“聚合器”函数传递给重新采样的数据集的方法,该函数具有原始值,原始时间段和“子”时间段。
非常感谢!
PS:不的工作方式是使用这样的自定义函数:
In[3]: distPerMonth.resample('D').apply(custom_function)
由于此功能,只有子系列可用(在大多数情况下为空)。我想我可以使用这些子序列来推导这是父母的时间段,然后使用父序列来获得相应的父值,以某种方式计算出有多少孩子,然后用这个数字除以父值,但这似乎是一个事情太费解了。
对于以后阅读此问题的人员:公认的解决方案在无间隔时间序列的情况下有效。如果行之间有间隙,请查看this question。
答案 0 :(得分:1)
您可以使用:
m=distPerMonth.resample('D').first()
m.groupby(m.notna().cumsum()).apply(lambda x: x/len(x.index)).ffill()
2019-01-01 3.225806
2019-01-02 3.225806
2019-01-03 3.225806
2019-01-04 3.225806
...
...
2019-02-25 3.571429
2019-02-26 3.571429
2019-02-27 3.571429
2019-02-28 3.571429