如何在pandas DataFrame中查找连续负数的最大出现个数
解决方案
直接用pandas的掩码、分组累计和滚动最大值逻辑即可实现,完整可运行代码如下:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'numbers': [-1, 3, 2, -3, -4, 9, 3] }) # 1. 生成负数掩码,负数位置标记为True,非负为False neg_mask = df['numbers'] < 0 # 2. 为连续的相同掩码值分配相同组ID,连续负数会被分到同一组 group_id = (neg_mask != neg_mask.shift()).cumsum() # 3. 按组计算连续负数的累计个数,非负位置结果为0 cons_count = neg_mask.groupby(group_id).cumsum() # 4. 计算到当前行为止的历史最大连续负数个数 df['max_cons'] = cons_count.cummax() print(df)
运行后输出结果和你给出的示例完全一致:
numbers max_cons 0 -1 1 1 3 1 2 2 1 3 -3 1 4 -4 2 5 9 2 6 3 2
额外说明
如果你不需要逐行的历史最大值,只需要整个列的全局最大连续负数个数,把最后一步换成 max_cons = cons_count.max() 即可。
内容的提问来源于stack exchange,提问作者tompal18
相关产品推荐
相关产品推荐

