上采样d时的等分值

2024-10-01 02:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python中的pandas库,我尝试将一些数据从每月值向上采样到每日值。有没有一种方法可以将一个值平均地拆分到其结果的“子项”上?你知道吗

例如,假设我在一月和二月都开了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月份的数值,因为我在不到几天的时间里就开了同样的距离。)

我要寻找的是一种将“aggregator”函数传递给重采样数据集的方法,原始值、原始时间段和“child”时间段都可用于此数据集。你知道吗

非常感谢!你知道吗


PS:What isnotworking is using a custom function like so:不工作的是使用如下自定义函数:

In[3]: distPerMonth.resample('D').apply(custom_function)

因为对于这个函数,只有子序列可用(在大多数情况下是空的)。我想我可以用这些子序列来推断哪个是父的时间段,然后用父序列来得到相应的父值,以某种方式计算出有多少子值,然后用这个数字除以父值,但这似乎是一种过于复杂的处理方式。你知道吗


对于稍后阅读此问题的读者:公认的解决方案适用于无间隙时间序列。如果行之间有间隙,请查看this question。你知道吗


Tags: 数据方法函数in时间序列out数值
1条回答
网友
1楼 · 发布于 2024-10-01 02:21:56

您可以使用:

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

相关问题 更多 >