Pandas实现相同值多连续块分组并计算每组period的最大最小值
实现方案
你可以通过pandas的连续分组标识+聚合统计实现需求,核心逻辑是先给连续相同的quantity值划分成独立分组,再对每个分组计算period的极值:
完整代码示例
import pandas as pd # 构造示例DataFrame data = { 'period': range(1, 25), 'quantity': [0]*7 + [10]*9 + [0]*8 } df = pd.DataFrame(data) # 生成连续相同quantity的分组标识 df['group_id'] = (df['quantity'] != df['quantity'].shift()).cumsum() # 分组聚合得到结果 result = df.groupby('group_id').agg( quantity = ('quantity', 'first'), min = ('period', 'min'), max = ('period', 'max') ).reset_index(drop=True) print(result)
代码说明
df['quantity'].shift():将quantity列整体向下偏移一行,用于和当前行的值对比(df['quantity'] != df['quantity'].shift()).cumsum():对比当前行和上一行的quantity值,出现不相等的位置返回True,累加后连续相同值的行会得到同一个分组IDgroupby聚合:按生成的分组ID分组,取每组第一个quantity值,同时计算该组period列的最小值、最大值,即可得到你需要的输出结果。
运行上述代码输出的结果和你给出的期望格式完全一致:
quantity min max 0 0 1 7 1 10 8 16 2 0 17 24
内容的提问来源于stack exchange,提问作者man1la
相关产品推荐
相关产品推荐

