我的输入是df
:
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)
。因此,我们需要用emty字符串隐藏数字4
。
我的预期输出是这样的:
COLUMN_1 COLUMN_2 COLUMN_3 COLUMN_4
0 1 0 2
1 1 3
2 3 2
3 2 5
4 5 8 8
说明:
我尝试了下面的代码,但我没有在正确的轨道,因为我得到了一个奇怪的布尔 Dataframe 。
df.diff(axis=1).eq(1).iloc[:, ::-1].cummax(axis=1).replace(True, '').iloc[:, ::-1]
2条答案
按热度按时间fwzugrvs1#
输出
mask
来标识需要用空字符串替换的元素。它还通过使用向量化操作来避免对行进行不必要的迭代。where
方法将前一列中的元素替换为空字符串,其中掩码为True
。ecbunoof2#
您需要在
diff
中使用负句点,并结合mask
:或者,对于就地修改:
使用
shift
的变体:输出量:
中间体: