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

基于Datetime条件填充Pandas DataFrame列的实现方案咨询

基于Datetime条件填充Pandas DataFrame列的实现方案咨询

嗨,我来帮你搞定这个按每日固定时间规则填充DataFrame的需求,其实用Pandas的索引时间属性加上条件选择就能轻松实现,步骤如下:

首先,我们先准备好环境和你提供的原始DataFrame:

from datetime import time
import pandas as pd
import numpy as np  

# 生成你提供的初始DataFrame
dates = pd.date_range("20241218", periods=9600,freq='1MIN')   
df = pd.DataFrame(np.random.randn(9600, 4), index=dates, columns=list("ABCD")) 

接下来给你两种实现方式,按需选择:

方法一:分步赋值(逻辑清晰,新手友好)

这种方式把每个规则拆解开,更容易理解每一步的作用:

  1. 先给所有值设为0(因为大部分时间都需要填充0,作为基础值):
df[:] = 0
  1. 匹配每日1:00的时间点,填充-2:
    通过索引的time属性提取纯时间部分,精准匹配1:00这个时间点:
# 定义目标时间点
target_100 = time(1, 0)
# 定位对应行并赋值
df.loc[df.index.time == target_100, :] = -2
  1. 匹配每日1:35到1:45的区间,填充-1:
    用时间属性判断区间范围,这里是闭区间(包含1:35和1:45这两个时间点):
# 定义区间的起始和结束时间
start_135 = time(1, 35)
end_145 = time(1, 45)
# 定位区间内的行并赋值
df.loc[(df.index.time >= start_135) & (df.index.time <= end_145), :] = -1

方法二:用np.select一次性处理(代码更紧凑)

如果不想分步操作,也可以用numpy的select函数,一次性定义所有条件和对应值,逻辑同样清晰:

# 定义三个判断条件
conditions = [
    df.index.time == time(1, 0),  # 条件1:每日1:00
    (df.index.time >= time(1,35)) & (df.index.time <= time(1,45)),  # 条件2:1:35-1:45区间
    True  # 条件3:其他所有情况
]
# 对应每个条件的填充值
values = [-2, -1, 0]

# 把规则应用到所有列
df[:] = np.select(conditions, values)

验证结果

你可以用下面的代码检查填充是否正确:

# 查看每日1:00的数据
print("每日1:00的数据示例:")
print(df.loc[df.index.time == time(1,0)].head())

# 查看1:35-1:45区间的数据
print("\n每日1:35-1:45的数据示例:")
print(df.loc[(df.index.time >= time(1,35)) & (df.index.time <= time(1,45))].head())

这样不管你的DataFrame包含多少天的数据,都会自动按每日的时间规则填充对应的值啦~

备注:内容来源于stack exchange,提问作者Abhishek Kulkarni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:00:30