You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以求和为填充方法将日度索引DataFrame重采样至不规则索引?

解决日度DataFrame采样到不规则索引并求和的问题

嘿,我懂你要实现的需求——把连续日度索引的DataFrame,按照另一个不规则索引的节点,把中间日期的数据求和后对应到不规则索引上对吧?这里有两个实用的方法,我给你一步步拆解:

首先先把你的示例数据构造出来:

import pandas as pd

# 连续日度的df0,每个dat值都是1
df0 = pd.DataFrame(index=pd.date_range(start='2018-03-10', periods=10))
df0['dat'] = 1

# 不规则索引的df1,取df0的部分行
df1 = df0.iloc[[0,3,4,6,9]].copy()

方法一:用asof匹配分组键(最直观高效)

这个思路是给df0里的每一个日期,找到不晚于它的最近的df1索引,然后按这个索引分组求和,最后对齐到df1的索引上:

# 给每个日期分配对应的df1分组键
df0['group_key'] = df0.index.to_series().apply(lambda x: df1.index.asof(x))

# 按分组键求和,再重索引到df1的索引确保顺序一致
result = df0.groupby('group_key')['dat'].sum().reindex(df1.index)

运行后你就得到想要的结果:

2018-03-10    1
2018-03-13    3
2018-03-14    1
2018-03-16    2
2018-03-19    3
Name: dat, dtype: int64

方法二:用区间切割(pd.cut)分组

如果你更喜欢用区间划分日期范围,也可以这么做:

# 构造区间:每个区间的右边界是df1的索引,左边界是上一个df1的索引(第一个区间左边界设为df0的起始日期)
bins = [df0.index[0]] + list(df1.index[1:])
interval_bins = pd.IntervalIndex.from_arrays(df1.index, bins, closed='right')

# 给df0的每个日期分配对应的区间
df0['interval'] = pd.cut(df0.index, bins=interval_bins)

# 按区间求和,然后把索引替换成区间的右边界(也就是df1的索引)
result = df0.groupby('interval')['dat'].sum()
result.index = interval_bins.right

这个方法同样能得到和你期望完全一致的结果~

核心逻辑其实很简单:先把连续日期按照不规则索引的节点分组,对每组求和,最后把结果对齐到不规则索引上就搞定啦!

内容的提问来源于stack exchange,提问作者mankoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:31:22