求助:Pandas实现连续值分组并标记长度的方法
解决方案
首先构造示例数据:
import pandas as pd data = {'a': [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1]} df = pd.DataFrame(data)
通过以下步骤生成目标列c:
- 生成连续值的分组标识:用
shift()对比当前行与上一行的a值是否不同,不同则分组序号加1,确保连续相同的a值被分到同一组。 - 计算每个分组的长度:用
groupby结合transform('size'),得到每行对应的分组总长度。 - 生成最终
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
相关产品推荐
相关产品推荐

