从值相对于前一列中的值减少的列开始,用零填充数据帧的每一行



我想从值相对于前一列中的值减少的列开始,用零填充数据帧的每一行

我有以下数据帧:

ActualDf = pd.DataFrame(np.array([[2, 3, 2, 3, 4, 5, 0, 0, 0, 0, 0], [1, 1, 1, 2, 2, 3, 1, 1, 0, 0, 0], [2, 2, 2, 3, 3, 5, 3, 3, 0, 0, 0], [2, 3, 2, 3, 3, 3, 4, 1, 2, 0, 0], [3, 3, 1, 2, 2, 5, 0, 0, 0, 0, 0], [1, 2, 3, 1, 2, 3, 0, 0, 0, 0, 0]]),
columns=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

)

我想获得这个

DesiredDf = pd.DataFrame(np.array([[2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 2, 2, 3, 0, 0, 0, 0, 0], [2, 2, 2, 3, 3, 5, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0]]),
columns=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])

怎么可能以有效的方式做到这一点?

这里有一个类似于使用mask:的方法

DesiredDf =ActualDf.mask(ActualDf.diff(axis=1).lt(0).cummax(axis=1), 0)

输出:

0  1  2  3  4  5  6  7  8  9  10
0  2  3  0  0  0  0  0  0  0  0   0
1  1  1  1  2  2  3  0  0  0  0   0
2  2  2  2  3  3  5  0  0  0  0   0
3  2  3  0  0  0  0  0  0  0  0   0
4  3  3  0  0  0  0  0  0  0  0   0
5  1  2  3  0  0  0  0  0  0  0   0

您可以使用difflt来查找差值为负值的位置,然后使用cumsumgt来标记第一个负值之后的所有单元格。

ActualDf[ActualDf.diff(axis=1).lt(0).cumsum(1).gt(0)] = 0

相关内容

  • 没有找到相关文章

最新更新