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

如何使用pandas对各分组的滑动窗口内字符串进行拼接?

实现方法

Pandas的rolling方法支持自定义函数处理非数值类型计算,你可以通过分组+滚动窗口自定义拼接逻辑+位移的方式实现需求,完全符合你给出的预期输出。

完整可运行代码

import pandas as pd

# 构造测试数据集
data = {
    'cluster': [1,1,1,1,1,2,2,2,2,2,2,2,2],
    'order': [1,2,3,4,5,1,2,3,4,5,6,7,8],
    'label': ['a','b','c','c','b','b','b','c','a','a','b','c','c']
}
df = pd.DataFrame(data)

# 若原始数据顺序不确定,必须先按cluster+order升序排序,避免拼接结果错误
df = df.sort_values(['cluster', 'order']).reset_index(drop=True)

# 核心计算逻辑
df['roll3'] = df.groupby('cluster', group_keys=False)['label']\
                .apply(lambda s: s.rolling(3).apply(lambda x: ''.join(x), engine='python').shift(1))

逻辑说明

  1. 按cluster分组,每个分组单独处理避免跨集群的窗口拼接
  2. 对分组内的label列开大小为3的滚动窗口,用自定义join函数拼接窗口内的三个字符串
  3. 用shift(1)将拼接结果整体向下位移1行,实现取当前行之前的3个前序值拼接的需求,前3行自然为NaN
  4. 加engine='python'是为了兼容不同Pandas版本,避免默认numba引擎不支持字符串操作的报错

输出验证

打印df即可得到你给出的预期结果:

clusterorderlabelroll3
011aNaN
112bNaN
213cNaN
314cabc
415bbcc
521bNaN
622bNaN
723cNaN
824abbc
925abca
1026bcaa
1127caab
1228cabc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:57:06