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

如何基于最近前置日期的per_day值生成布尔列?(日期间隔不固定)

基于最近前置日期的per_day值生成布尔标记解决方案

原始数据集

,clock_now,competition,market_name,lay,per_day
0,2022-12-30,A,B,-1.0,-1.0
1,2022-12-31,A,B,1.28,0.28
2,2023-01-01,A,B,-1.0,-0.72
3,2023-01-02,A,B,1.0,0.28
4,2023-01-03,A,B,1.0,1.28
5,2023-01-04,A,B,-1.0,-1.72
6,2023-01-04,A,B,-1.0,-1.72
7,2023-01-04,A,B,-1.0,-1.72

需求说明

  • 为每一行数据找到离当前行日期最近的前置日期对应的per_day值
  • 若该值大于0,标记为True;否则标记为False
  • 示例:2023-01-04的行需取2023-01-03的per_day值(1.28),因此标记为True
  • 预期输出布尔列表:
False
False
True
False
True
True
True
True

原代码问题分析

  1. 逻辑错误:df.loc[df.clock_now == df['clock_now'] - timedelta(days=1),'per_day'].values[0]无法逐行匹配最近前置日期,只会取第一个匹配值,导致所有结果为False
  2. 场景缺失:未考虑前置日期间隔大于1天、同一日期有多行数据的情况

解决方案代码

import pandas as pd
import numpy as np

# 加载数据集(若已从文件读取可替换此部分)
data = [
    [0, "2022-12-30", "A", "B", -1.0, -1.0],
    [1, "2022-12-31", "A", "B", 1.28, 0.28],
    [2, "2023-01-01", "A", "B", -1.0, -0.72],
    [3, "2023-01-02", "A", "B", 1.0, 0.28],
    [4, "2023-01-03", "A", "B", 1.0, 1.28],
    [5, "2023-01-04", "A", "B", -1.0, -1.72],
    [6, "2023-01-04", "A", "B", -1.0, -1.72],
    [7, "2023-01-04", "A", "B", -1.0, -1.72]
]
df = pd.DataFrame(data, columns=["", "clock_now", "competition", "market_name", "lay", "per_day"])

# 转换日期类型并按日期排序
df["clock_now"] = pd.to_datetime(df["clock_now"])
df = df.sort_values("clock_now").reset_index(drop=True)

# 构建日期到最近前置日期per_day值的映射
unique_dates = df["clock_now"].unique()
date_per_day_map = {}

# 处理第一个日期(无前置,用自身per_day)
first_per_day = df[df["clock_now"] == unique_dates[0]]["per_day"].iloc[0]
date_per_day_map[unique_dates[0]] = first_per_day

# 遍历后续日期,匹配最近前置日期的per_day
for i in range(1, len(unique_dates)):
    current_date = unique_dates[i]
    prev_date = unique_dates[i-1]
    prev_per_day = df[df["clock_now"] == prev_date]["per_day"].iloc[0]
    date_per_day_map[current_date] = prev_per_day

# 生成布尔标记列
df["invest"] = df["clock_now"].map(date_per_day_map) > 0

# 输出结果
print(df["invest"].tolist())

代码优势

  • 自动处理同一日期多行数据的场景,同一日期的行共用同一个前置日期的per_day值
  • 支持前置日期间隔大于1天的情况,仅需确保日期按顺序排列
  • 第一行无前置日期时,用自身per_day值匹配预期结果

输出结果与预期完全一致:[False, False, True, False, True, True, True, True]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:15:20