用户列表迁移时按相同ID合并多行并汇总订阅数值的实现方法咨询
方案1:Excel/Google Sheets 无代码实现(适合非技术人员,数据量10万行以内)
- 第一步:将原始数据按「邮箱」列升序、「订阅起始日期」列降序排序,确保同一邮箱的最新订阅记录排在最前
- 第二步:在空白 Sheet 中用
UNIQUE(原始数据!A:A)提取所有不重复的邮箱地址(假设A列为邮箱列) - 第三步:匹配用户基础信息,同邮箱的姓名、手机号等信息一致,直接用
VLOOKUP匹配第一条记录即可,公式参考=VLOOKUP(当前行邮箱, 原始数据!A:B, 2, FALSE)(B列为姓名列) - 第四步:统计单用户总订阅费用,公式参考
=SUMIF(原始数据!A:A, 当前行邮箱, 原始数据!C:C)(C列为订阅费用列) - 第五步:匹配订阅等级,公式参考
=IF(当前总费用单元格<20,"Beginner","Pro") - 第六步:提取最新订阅日期,公式参考
=MAXIFS(原始数据!D:D, 原始数据!A:A, 当前行邮箱)(D列为订阅起始日期列,旧版Excel无MAXIFS可改用数组公式=MAX(IF(原始数据!A:A=当前行邮箱,原始数据!D:D))按Ctrl+Shift+Enter确认)
方案2:Python 脚本实现(适合数据量10万行以上,需批量处理的场景)
import pandas as pd # 读取原始数据,csv格式换成read_csv即可 df = pd.read_excel("原始订阅数据.xlsx") # 按邮箱分组聚合计算 result = df.groupby("邮箱", as_index=False).agg( # 所有用户基础字段都按该格式添加,取第一条即可 姓名=("姓名", "first"), 总订阅费用=("订阅费用", "sum"), 最新订阅日期=("订阅起始日期", "max") ) # 生成订阅等级字段 result["订阅等级"] = result["总订阅费用"].apply(lambda x: "Beginner" if x < 20 else "Pro") # 导出结果,去掉行索引 result.to_excel("合并后订阅数据.xlsx", index=False)
使用前将代码中的列名替换为自己实际数据的列名即可。
方案3:SQL 实现(适合数据存储在业务数据库的场景)
SELECT 邮箱, 姓名, -- 其他需要保留的用户基础字段都添加到此处和GROUP BY中 SUM(订阅费用) AS 总订阅费用, MAX(订阅起始日期) AS 最新订阅日期, CASE WHEN SUM(订阅费用) < 20 THEN 'Beginner' ELSE 'Pro' END AS 订阅等级 FROM 订阅记录表 GROUP BY 邮箱, 姓名
注意事项
- 所有操作前务必备份原始数据,避免误操作导致数据丢失
- 若存在同一邮箱对应不同基础信息(如姓名不一致)的情况,建议先清洗基础信息再执行合并操作
内容的提问来源于stack exchange,提问作者Mista K.
相关产品推荐
相关产品推荐

