如何按Col1连续递增规则对Pandas DataFrame分组并重置组号
解决Pandas按Col1连续递增分组的问题
嘿,这个分组需求我刚好处理过类似的,咱们一步步来实现你想要的效果!
首先明确核心需求:当Col1的连续值不再递增(包括相等或者变小)时,就重置组号。我们可以通过Pandas的差值计算和累加功能轻松搞定。
步骤1:构造示例DataFrame
先把你给出的示例数据转换成Pandas DataFrame:
import pandas as pd data = { 'Col1': [34, 35, 36, 34, 35, 35, 36, 34, 35, 36], 'Col2': [12.5, 12.9, 12.6, 12.5, 13.4, 12.9, 13.7, 12.9, 13.1, 12.7] } df = pd.DataFrame(data)
步骤2:生成分组号Col3
用以下代码直接生成目标列:
# 计算Col1的前后差值,标记需要重置分组的位置(差值<=0表示不再递增) reset_flag = df['Col1'].diff() <= 0 # 对重置标记累加,填充第一行的NaN为True(第一行默认是第一个组的开始),得到连续组号 df['Col3'] = reset_flag.fillna(True).cumsum()
结果验证
运行代码后输出df,就能得到你期望的结果:
Col1 Col2 Col3 0 34 12.5 1 1 35 12.9 1 2 36 12.6 1 3 34 12.5 2 4 35 13.4 2 5 35 12.9 3 6 36 13.7 3 7 34 12.9 4 8 35 13.1 4 9 36 12.7 4
代码细节解释
df['Col1'].diff():计算当前行与前一行Col1的差值,第一行没有前一行,结果为NaN;reset_flag = df['Col1'].diff() <= 0:当差值小于等于0时,说明当前行Col1未实现递增,标记为需要重置分组;reset_flag.fillna(True):把第一行的NaN替换为True,因为第一行是第一个组的起始;.cumsum():对布尔值累加(True视为1,False视为0),每遇到一个重置标记,累加值就加1,正好生成连续的组号。
内容的提问来源于stack exchange,提问作者Viky N
相关产品推荐
相关产品推荐

