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

求助:Pandas实现连续值分组并标记长度的方法

解决方案

首先构造示例数据:

import pandas as pd

data = {'a': [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1]}
df = pd.DataFrame(data)

通过以下步骤生成目标列c:

  1. 生成连续值的分组标识:用shift()对比当前行与上一行的a值是否不同,不同则分组序号加1,确保连续相同的a值被分到同一组。
  2. 计算每个分组的长度:用groupby结合transform('size'),得到每行对应的分组总长度。
  3. 生成最终c列:a为1的行保留分组长度,a为0的行直接设为0。

完整代码:

# 生成连续值分组标识
df['group'] = (df['a'] != df['a'].shift()).cumsum()
# 计算每个分组的长度
group_len = df.groupby('group')['a'].transform('size')
# 生成c列
df['c'] = df.apply(lambda row: group_len[row.name] if row['a'] == 1 else 0, axis=1)
# 移除中间分组列(可选)
df.drop('group', axis=1, inplace=True)

运行后得到的结果与期望一致:

a  c
0   1  1
1   0  0
2   1  2
3   1  2
4   0  0
5   1  3
6   1  3
7   1  3
8   0  0
9   1  2
10  1  2

后续按c列分组计算其他列均值的示例(假设存在b列):

mean_by_c = df.groupby('c')['b'].mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:07:47