Python DataFrame中按序列连续递增条件拼接字符串的方法
解决方案
可以通过Pandas的分组聚合功能实现需求,核心是先识别出连续递增1的序列组,再对每组内容进行拼接:
步骤说明
- 计算
Sequence text列与前一行的差值,当差值不等于1时,标记为新组的起始 - 基于标记生成分组ID,将连续序列的行归为同一组
- 对每组的
Names进行字符串拼接,Sequence text转为字符串后用逗号连接
完整代码
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Names': ['x', 'y', 'a', 'b', 'c'], 'Sequence text': [1, 2, 4, 5, 6] }) # 生成分组键:当前行与前一行Sequence text差值≠1时,组号+1 df['group'] = (df['Sequence text'] - df['Sequence text'].shift(1) != 1).cumsum() # 分组聚合处理 result = df.groupby('group').agg( Names=('Names', ''.join), Sequence text=('Sequence text', lambda x: ','.join(map(str, x))) ).reset_index(drop=True) print(result)
代码解释
df['Sequence text'].shift(1):将Sequence text列向下偏移一行,用于计算当前行与前一行的数值差(df['Sequence text'] - df['Sequence text'].shift(1) != 1).cumsum():差值不等于1时返回True,累计求和后生成唯一分组ID,同一连续序列的行将被分到同一组groupby('group').agg(...):按分组ID聚合数据,''.join直接拼接Names列内容,lambda x: ','.join(map(str, x))把数字转为字符串后用逗号连接reset_index(drop=True):移除分组ID列,得到符合要求的结果
运行后输出结果与期望一致:
| Names | Sequence text |
|---|---|
| xy | 1,2 |
| abc | 4,5,6 |
内容的提问来源于stack exchange,提问作者Rachel Lee
相关产品推荐
相关产品推荐

