上采样数据时均分值

时间:2019-04-24 09:15:11

标签: python pandas

我使用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

1 个答案:

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