我有一个0和1的矩阵,我想对每一列做一个累计,当看到一个0时,它就会重置为0。例如,我们有以下矩阵:
df = pd.DataFrame([[0,1],[1,1],[0,1],[1,0],[1,1],[0,1]],columns = ['a','b'])
print(df)
a b
0 0 1
1 1 1
2 0 1
3 1 0
4 1 1
5 0 1
- 我想要的结果是:**
print(df)
a b
0 0 1
1 1 2
2 0 3
3 1 0
4 2 1
5 0 2
然而,当我尝试df.cumsum() * df
时,我能够正确地识别0元素,但是计数器没有重置:
print(df.cumsum() * df)
a b
0 0 1
1 1 2
2 0 3
3 2 0
4 3 4
5 0 5
4条答案
按热度按时间xwmevbvl1#
您可以用途:
yftpprvb2#
试试这个
pcrecxhr3#
您也可以尝试以下简单但可靠的方法。
按每列-创建要在其中计数的组。组在按行的顺序值差异出现时开始,并在值为常量时持续:
(x != x.shift()).cumsum()
.示例:
使用
pd.DataFrame
的apply
和groupby
方法计算每列组内的累积和,您将在一行中得到重置为零的累积和:h79rfbju4#
一个稍微有点笨拙的方法是在执行
cumsum
:cumsum
:cumsum
:cumsum
:cumsum
:cumsum
: