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

Pandas数据分组需求:按正负连续序列合并尾随0分组

没问题,我来帮你搞定这个分组需求!咱们可以通过Pandas结合Numpy一步步实现你要的效果,思路和代码如下:

核心思路

  1. 先给每个x值标记类型:负数标记为-1,正数标记为1,0暂时转为NaN
  2. 用向前填充的方式,让所有0继承前面最近的非0值的类型(这样单个或连续的0就会自动归入前序的正负组)
  3. 根据类型的变化生成分组ID,连续相同类型的元素会被分到同一组
  4. 最后按分组ID提取每组的x值即可

完整代码实现

import pandas as pd
import numpy as np

# 先构造你提供的DataFrame
data = {
    'x': [-5, -7, -3, 0, 1, 6, 3, 0, 0, -10, -9, -8, 11, 17, 13, 0, 0, 0, 0, 0, -1, -9, -3],
    'y': [25, 32, 33, 22, 16, 10, 36, 22, 55, 24, 32, 5, 4, 9, 88, 14, 12, 0, 10, 96, 492, -440, 34]
}
df = pd.DataFrame(data)

# 1. 标记类型并处理0的归属
df['group_type'] = np.sign(df['x']).replace(0, np.nan)  # 把0转为NaN,方便后续填充
df['group_type'] = df['group_type'].ffill()  # 向前填充,让0继承前序非0类型

# 2. 生成分组ID:当类型变化时,分组ID+1
df['group_id'] = (df['group_type'] != df['group_type'].shift(1)).cumsum()

# 3. 提取每个组的x值
groups = df.groupby('group_id')['x'].apply(list).tolist()

# 输出你要的格式
for idx, group in enumerate(groups, 1):
    print(f'data{idx} = {group}')

运行结果

执行代码后会输出:

data1 = [-5, -7, -3, 0]
data2 = [1, 6, 3, 0, 0]
data3 = [-10, -9, -8]
data4 = [11, 17, 13, 0, 0, 0, 0, 0]
data5 = [-1, -9, -3]

刚好完全匹配你想要的拆分结果!如果后续数据有开头就出现0的情况,你可以根据需求额外处理(比如单独分组或者过滤掉),当前代码已经完美适配你提供的数据集啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:10