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

如何按用户ID提取时序数据中每2天周期的最后值至新列?

按用户ID提取2天周期最后值生成新列的实现方案

需求说明

现有带2日求和列的时间序列数据,需按uid(用户ID)分组,提取每个2天周期的最后cols值,写入新列new。示例数据如下:

timestamp           uid         cols        new
2020-10-10 00:00     1          10   
2020-10-10 00:00     2          5      
2020-10-10 00:10     1          20
2020-10-10 00:10     2          20
2020-10-10 00:20     1          40
 .... 
2020-10-11 23:50     1          3400        
2020-10-11 23:50     2          5250
2020-10-12 00:00     1           20        3400
2020-10-12 00:00     2           15        5250

实现步骤(基于Pandas)

1. 数据预处理

先确保时间列格式正确,并按用户ID和时间排序:

import pandas as pd

# 转换timestamp为datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])
# 按uid和时间升序排序,保证时序逻辑正确
df = df.sort_values(['uid', 'timestamp'])

2. 为每行分配周期标签

按uid分组,将时间划分为连续的2天周期,给每行打上周期标识:

# 为单个用户的时间序列分配2天周期标签
def assign_period(x):
    # 生成覆盖该用户所有数据的2天间隔边界
    bins = pd.date_range(start=x.min(), end=x.max() + pd.Timedelta(days=2), freq='2D')
    # 为每个时间点匹配对应的周期
    return pd.cut(x, bins=bins, labels=False, include_lowest=True)

df['period'] = df.groupby('uid')['timestamp'].transform(assign_period)

3. 提取周期最后值并映射到新列

计算每个用户+周期的最后cols值,将其映射到下一个周期的行中:

# 提取每个周期的最后cols值
period_last = df.groupby(['uid', 'period'])['cols'].last().reset_index()
# 将周期标签+1,让当前周期的最后值对应到下一个周期
period_last['period'] += 1
# 合并到原数据表,生成new列
df = df.merge(period_last, on=['uid', 'period'], how='left', suffixes=('', '_new'))
# 重命名列并整理输出结构
df.rename(columns={'cols_new': 'new'}, inplace=True)
df = df[['timestamp', 'uid', 'cols', 'new']]

执行后即可得到示例中的目标结果:每个新2天周期的行,new列会填充上一个周期的最后cols值,其余行保持空值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:31:58