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

如何隐藏DataFrame中水平方向步长为1的单调递增序列元素?

问题:处理DataFrame中水平递增序列的前置元素隐藏

原始DataFrame

COLUMN_1  COLUMN_2  COLUMN_3  COLUMN_4
0         0         1         0         2
1         1         1         2         3
2         1         2         3         2
3         1         2         4         5
4         4         5         8         8

需求说明

水平方向上,将步长为1的单调递增序列的前置元素(左闭右开区间内的左侧元素)替换为空字符串隐藏。例如最后一行的[4,5,8,8]中,序列[4,5)的4需被隐藏。

预期输出

COLUMN_1 COLUMN_2 COLUMN_3  COLUMN_4
                 1        0         2
        1                           3
                          3         2
                 2                  5
                 5        8         8

尝试的代码及问题

尝试了以下代码,但得到的是布尔型DataFrame,未达到预期效果:

df.diff(axis=1).eq(1).iloc[:, ::-1].cummax(axis=1).replace(True, '').iloc[:, ::-1]

解决方案

你的思路方向是对的,但需要调整逻辑,把布尔标记映射到原始数据的替换上,而非直接替换布尔值。具体步骤如下:

  1. 先计算每行中当前元素与下一个元素是否满足步长为1的递增,得到需要隐藏元素的标记矩阵
  2. 从右向左做累积最大值,确保连续递增序列的所有前置元素都被标记为需要隐藏
  3. 根据标记矩阵,将原始数据中对应位置替换为空字符串,其余位置保留原值

完整代码:

# 生成需要隐藏元素的标记矩阵:当前元素与下一个元素差为1的位置标记为True
mask = df.diff(axis=1).eq(1)
# 从右向左累积最大值,处理连续递增的情况
mask = mask.iloc[:, ::-1].cummax(axis=1).iloc[:, ::-1]
# 替换操作:标记为True的位置设为空字符串,否则保留原值
result = df.where(~mask, '')
# 打印结果(去掉索引)
print(result.to_string(index=False))

运行后即可得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:18