基于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"))
接下来给你两种实现方式,按需选择:
方法一:分步赋值(逻辑清晰,新手友好)
这种方式把每个规则拆解开,更容易理解每一步的作用:
- 先给所有值设为0(因为大部分时间都需要填充0,作为基础值):
df[:] = 0
- 匹配每日1:00的时间点,填充-2:
通过索引的time属性提取纯时间部分,精准匹配1:00这个时间点:
# 定义目标时间点 target_100 = time(1, 0) # 定位对应行并赋值 df.loc[df.index.time == target_100, :] = -2
- 匹配每日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
相关产品推荐
相关产品推荐

