如何在PySpark中合并连续重复的行
没问题,这事儿用pandas处理起来很直观,核心是先把连续重复的Col-1项划分为独立分组,再对每个分组的Col-2做字符串拼接就行。我给你写个完整的可运行示例:
步骤1:构造示例DataFrame
先把你提供的原始数据转换成标准的pandas DataFrame:
import pandas as pd # 对应你给出的原始数据 data = { 'Col-1': ['a', 'a', 'x', 'a', 'f', 'a', 'a'], 'Col-2': ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7'] } df = pd.DataFrame(data)
步骤2:标记连续重复的分组
我们需要给每一组连续相同的Col-1值分配唯一的分组ID,这里用ne()(判断不等于)和shift()(取上一行值)的组合来识别分组边界,再用cumsum()生成递增的分组标识:
# 生成连续重复项的分组ID group_ids = df['Col-1'].ne(df['Col-1'].shift()).cumsum()
步骤3:分组聚合合并字符串
按分组ID聚合数据,Col-1取每组的第一个值(因为同一组内值完全相同),Col-2用+拼接所有字符串:
# 执行分组合并操作 result_df = df.groupby(group_ids).agg( **{ 'Col-1': ('Col-1', 'first'), 'Col-2': ('Col-2', lambda x: '+'.join(x)) } ).reset_index(drop=True)
查看最终结果
运行print(result_df)就能得到你想要的输出:
Col-1 Col-2 0 a d1+d2 1 x d3 2 a d4 3 f d5 4 a d6+d7
如果你的原始DataFrame列名带特殊符号(比如Col-1的横杠),记得在聚合时用引号包裹列名,避免语法错误。
内容的提问来源于stack exchange,提问作者vish
相关产品推荐
相关产品推荐

