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

如何用pandas实现基于日期连续性的列差值计算?

使用Pandas实现日期连续时的权重差值计算

嘿,这个需求很明确,我们可以通过几步简单的Pandas操作来实现,我给你一步步拆解:

1. 先构造测试用的原始数据

首先我们先把你给出的DataFrame用代码构造出来,方便后续测试:

import pandas as pd
import numpy as np

data = {
    'weight': [43, 30, 45, 25, 35, 39],
    'Date': ['09/03/2018 08:48:48', '10/03/2018 23:28:48', '12/03/2018 04:21:44',
             '17/03/2018 00:23:32', '18/03/2018 04:49:01', '19/03/2018 20:14:37'],
    'dateDay': ['09/03/2018', '10/03/2018', '12/03/2018', '17/03/2018', '18/03/2018', '19/03/2018']
}

df = pd.DataFrame(data)

2. 转换日期列格式

原始的dateDay是字符串类型,没法直接做日期运算,所以先把它转换成datetime类型:

df['dateDay'] = pd.to_datetime(df['dateDay'], format='%d/%m/%Y')

这里的format='%d/%m/%Y'是匹配你数据里的日/月/年格式,确保转换不会出错。

3. 判断日期是否连续

我们需要获取每一行的上一行日期,然后计算两者的天数差,以此判断是否是次日:

# 获取上一行的日期
df['prev_date'] = df['dateDay'].shift(1)
# 计算当前日期与上一行日期的天数差
df['day_diff'] = (df['dateDay'] - df['prev_date']).dt.days

shift(1)函数会把列数据整体下移一行,这样每一行就能拿到上一行的日期值;dt.days则是把日期差转换成具体的天数数值。

4. 计算目标列Fun_Cum

根据你的规则:如果日期差是1天(即次日),就用当前weight减去上一行的weight,否则设为NULL(对应Pandas里的NaN缺失值):

# 用np.where实现条件判断赋值
df['Fun_Cum'] = np.where(df['day_diff'] == 1, df['weight'] - df['weight'].shift(1), np.nan)

5. 整理最终结果

最后我们可以删掉中间用的辅助列,并把NaN替换成字符串'NULL',让结果和你期望的完全一致:

# 删除辅助列
df = df.drop(['prev_date', 'day_diff'], axis=1)
# 将NaN替换为NULL
df['Fun_Cum'] = df['Fun_Cum'].replace({np.nan: 'NULL'})

现在你打印df就能得到和示例完全一样的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:54