You need to enable JavaScript to run this app. pandas DataFrame基于前一天同小时条件创建difference列
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame基于前一天同小时条件创建difference列

实现逻辑
  • 先将datetime列从字符串转换为pandas原生时间格式,支撑时间偏移计算
  • 构建时间到得分的检索映射表,通过时间键快速匹配对应记录的得分
  • 逐行匹配计算:
    • 将当前行的时间往前偏移1天,得到“前一天同一小时”的目标时间点
    • 如果目标时间点在映射表中存在匹配得分,difference = 当前行得分 - 匹配到的前一天同小时得分
    • 如果目标时间点无匹配记录,difference 直接取当前行的得分值

注:该计算逻辑不依赖原始数据的行排序,即使datetime列是乱序存储的,也能基于时间点的精准匹配得到正确结果,无需提前对DataFrame做时间排序。

可运行代码
import pandas as pd
df = pd.DataFrame({
    'score': [2, 13, 24, 15, 11, 44], 
    'datetime': ["2017-08-30 07:00:00", "2017-08-30 08:00:00", "2017-08-31 07:00:00", "2017-08-31 08:00:00", "2017-08-29 21:00:00", "2017-08-28 21:00:00"]
})

# 转换datetime列为时间类型
df['datetime'] = pd.to_datetime(df['datetime'])
# 构建时间-得分映射字典
time_score_map = df.set_index('datetime')['score'].to_dict()

def calc_difference(row):
    # 计算前一天同一小时的时间点
    prev_same_time = row['datetime'] - pd.Timedelta(days=1)
    # 查找对应时间的得分
    prev_score = time_score_map.get(prev_same_time, None)
    # 按规则计算差值
    if prev_score is not None:
        return row['score'] - prev_score
    return row['score']

# 生成difference列
df['difference'] = df.apply(calc_difference, axis=1)
结果验证

运行代码后得到的difference列值依次为2、13、22、2、-33、44,与题目给出的预期示例完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 14:57:02