python - 上采样数据时等分值
问题描述
使用 中的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)
因为对于此功能,只有子系列可用(大多数情况下为空)。我想我可以使用这些子系列来推断哪个是父母的时间段,然后使用父系列来获取相应的父值,以某种方式计算有多少个孩子,然后将父值除以这个数字,但这似乎是处理事情的方式过于复杂。
对于那些稍后阅读此问题的人:公认的解决方案适用于无间隙时间序列的情况。如果行之间有间隙,请查看此问题。
解决方案
您可以使用:
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
推荐阅读
- javascript - 如何在此 Html 页面中添加另一个节点
- amazon-web-services - 如何合并多个 Parquet 文件(存储在 s3 中)并在 s3 中另存为一个 csv 文件?
- api - 如何使用 API 找到前 10 名加密货币交易者
- r - 交互式系统发育和热图图:单击系统发育中的一个节点并显示各种热图子集
- java - 使用邻接矩阵的广度优先搜索
- python - 如何将带有标记道路方向的 xml/geojson/shapefile 等文件转换为 NetworkX MultiDiGraph?
- python - Dash - 通过函数回调更改 HTML.iframe 元素
- typescript - Typescript,如何重新声明复杂的库类型?
- c# - VS Code 中的 OmniSharp 服务器问题
- javascript - Vue JS Electron 在 nem run electron:serve 上服务空白