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

pandas如何用另一DataFrame索引重索引,按窗口求和填充target列值

正确实现代码

你要实现的是按df1的索引作为时间窗口的左边界,对每个窗口内的df0.target值求和,用pd.cut + 分组求和的方案即可,支持df1索引为不规则时间的场景:

import pandas as pd
import numpy as np

# 你的示例初始化代码
df0 = pd.DataFrame(index=pd.date_range(start='2018-10-31 00:17:24', periods=50,freq='1s'))
df1 = pd.DataFrame(index=pd.date_range(start='2018-10-31 00:17:24', periods=50,freq='20s'))
df0['dat'] = np.random.rand(len(df0))
df0['target'] = 0
df0.loc[(df0['dat'] >= 0.5), 'target'] = 1

# ------------------- 核心实现 -------------------
# 1. 构造时间窗口边界:左闭右开,最后补充一个边界覆盖df0的最大时间
bins = df1.index.append(pd.Index([df0.index.max() + pd.Timedelta(seconds=1)]))
# 2. 给df0的每行打分组标签,对应所属的df1索引
df0['group'] = pd.cut(df0.index, bins=bins, labels=df1.index, right=False)
# 3. 按分组求和target,赋值给df1
df1['target_sum'] = df0.groupby('group')['target'].sum()

如果你的df1索引是固定规则的20秒间隔,也可以直接用重采样语法简化:

df1['target_sum'] = df0.resample('20S', label='left', closed='left')['target'].sum()

原代码问题说明

你原来的写法逻辑不符合需求:

  • reindex + interpolate是用来补全缺失值做插值的,和按窗口求和的需求完全不匹配
  • 最后调用sum()是对整个DataFrame的所有行做全局求和,得到的是整列的总累加值,自然不是每个窗口的单独求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:45:07