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

如何移除NULL值并将同一用户对应的多个日期合并到同一行

移除NULL值并将同一用户多日期合并为一行的解决方案

针对你描述的需求,可根据你使用的工具选择对应方案:

SQL 实现

核心逻辑是先通过窗口函数给每个用户的日期排序,再用分组聚合自动忽略NULL值完成行转列,不需要额外写NULL过滤逻辑:

SELECT 
  user_id,
  MAX(CASE WHEN date_rank = 1 THEN date_col END) AS date_1,
  MAX(CASE WHEN date_rank = 2 THEN date_col END) AS date_2,
  MAX(CASE WHEN date_rank = 3 THEN date_col END) AS date_3
  -- 有更多日期就继续加对应行
FROM (
  SELECT 
    user_id,
    date_col,
    ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY date_col) AS date_rank
  FROM 你的表名
  WHERE date_col IS NOT NULL -- 可提前过滤NULL值,也可以省略不写,MAX会自动跳过NULL
) t
GROUP BY user_id

如果要把所有日期合并为单个逗号分隔的字段,直接用字符串聚合函数即可:

-- MySQL写法
SELECT user_id, GROUP_CONCAT(date_col ORDER BY date_col SEPARATOR ',') AS all_dates
FROM 你的表名
GROUP BY user_id

Pandas 实现

import pandas as pd

# 假设你的数据存在df中,字段为user_id、date_col
# 先过滤NULL值
df = df.dropna(subset=['date_col'])

# 方式1:所有日期合并为列表列
df_merge = df.groupby('user_id')['date_col'].agg(list).reset_index(name='all_dates')

# 方式2:拆分为多列(匹配你要的效果图)
df_pivot = df.groupby('user_id')['date_col']\
             .apply(lambda x: x.reset_index(drop=True))\
             .unstack()\
             .add_prefix('date_')\
             .reset_index()

Excel 实现

如果你使用的是Excel 365/2021及以上版本,用内置函数即可快速实现:

  1. 先提取所有唯一用户ID:=UNIQUE(原表用户ID列范围)
  2. 合并所有日期为单个单元格:=TEXTJOIN(",",TRUE,FILTER(原表日期列,原表用户ID列=当前行用户ID,""))
  3. 如果要拆分为多列,用=TOROW(FILTER(原表日期列,原表用户ID列=当前行用户ID,""))会自动横向溢出填充多列

你当前的尝试效果:
按用户ID拆分的日期
目标实现效果:
日期合并到同一行展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:45:07