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

如何基于Pandas DataFrame为每个用户生成2019年365天时间序列?

实现方法

核心思路

通过生成2019年全量日期、构建用户-日期笛卡尔积、合并已有数据并填充缺失值三个核心步骤,为每个用户生成365天的score时间序列。

代码实现

先给出示例输入数据,再逐步完成处理:

import pandas as pd

# 示例输入数据
df_t = pd.DataFrame({
    'id': [1,2,3,4,5],
    'user_id': [101,101,102,103,101],
    'timestamp': ['2019-01-01', '2019-01-03', '2018-12-31', '2019-05-20', '2020-02-10'],
    'score': [85, 90, 78, 92, 88]
})

df_u = pd.DataFrame({
    'user_id': [101,102,103]
})

# 1. 生成2019年全年日期序列
dates_2019 = pd.date_range(start='2019-01-01', end='2019-12-31', freq='D')
df_dates = pd.DataFrame({'date': dates_2019})

# 2. 预处理df_t:仅保留2019年数据,确保(user_id, 日期)唯一
df_t['date'] = pd.to_datetime(df_t['timestamp']).dt.date
# 筛选2019年有效记录
df_t_2019 = df_t[(pd.to_datetime(df_t['date']) >= '2019-01-01') & 
                 (pd.to_datetime(df_t['date']) <= '2019-12-31')]
# 同一天同一用户多条数据时保留第一条,如需聚合可改用groupby+agg(如mean/max)
df_t_unique = df_t_2019.drop_duplicates(subset=['user_id', 'date'], keep='first')[['user_id', 'date', 'score']]

# 3. 构建用户-日期笛卡尔积:每个用户匹配365天
df_u['temp_key'] = 1
df_dates['temp_key'] = 1
df_user_dates = df_u.merge(df_dates, on='temp_key').drop('temp_key', axis=1)
df_user_dates['date'] = df_user_dates['date'].dt.date  # 统一日期格式

# 4. 合并数据并填充缺失值
df_result = df_user_dates.merge(df_t_unique, on=['user_id', 'date'], how='left')
df_result['score'] = df_result['score'].fillna(-1)

# 5. 整理为每个用户的365长度时间序列
user_series = df_result.groupby('user_id')['score'].apply(list).reset_index()
user_series.columns = ['user_id', '2019_score_series']

print(user_series)

预期输出

user_id                                  2019_score_series
0      101  [85.0, -1.0, 90.0, -1.0, -1.0, -1.0, -1.0, -1...
1      102  [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1...
2      103  [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1...

细节说明

  • 若df_t中存在同一用户同一天多条score记录,可将drop_duplicates替换为聚合逻辑,例如df_t_2019.groupby(['user_id', 'date'])['score'].mean().reset_index()
  • 若原始timestamp为数值型时间戳,可改用pd.to_datetime(df_t['timestamp'], unit='s')转换格式
  • 最终序列严格按2019年1月1日至12月31日的顺序排列,符合时间序列要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:20:45