如何在列中的值上标注升序连续数字?

时间:2019-10-31 18:59:23

标签: python pandas numpy

我有一列看起来像这样:

1
0
0
1
0
0
0
1

我希望输出看起来像这样:

1 <--
0
0
2 <--
0
0
0
3 <--

等等。我不确定从哪里开始。大约有10,000行,我想做一个if语句可能需要一段时间。如何获得此输出?

6 个答案:

答案 0 :(得分:4)

高效简洁:

s.cumsum()*s

0    1       
1    0       
2    0       
3    2       
4    0       
5    0       
6    0       
7    3       
dtype: int64 

答案 1 :(得分:2)

使用Series.cumsum + Series.where

以下是示例:

print(df)

   0
0  1
1  0
2  0
3  1
4  0
5  0
6  0
7  1


df['0']=df['0'].cumsum().where(df['0'].ne(0),df['0'])
print(df)

   0
0  1
1  0
2  0
3  2
4  0
5  0
6  0
7  3

答案 2 :(得分:1)

尝试一下:

s = pd.Series([1,0,0,1,0,0,0,1])
s.cumsum().mask(s==0, 0)

输出:

0    1
1    0
2    0
3    2
4    0
5    0
6    0
7    3
dtype: int64

答案 3 :(得分:0)

np.wherecumsum

df['cum_sum'] = np.where(df.val>0, df.val.cumsum(), 0)

输出:

   val  cum_sum
0    1        1
1    0        0
2    0        0
3    1        2
4    0        0
5    0        0
6    0        0
7    1        3

答案 4 :(得分:0)

您可以做这样的事情

df = {'col1': [1, 0,0,0,1,0,0,1] }

count = 0
col = []
for val in zip(df['col1']):
    if val[0] == 1:
       count+=1
       col.append(count)
    else:
       col.append(val[0])

您将获得[1, 0, 0, 0, 2, 0, 0, 3]

答案 5 :(得分:0)

仅选择非零行并将这些值替换为cum

import pandas as pd

df=pd.DataFrame({'col': [0,1,0,0,1,0,0,0,1,0] })
index=df["col"]!=0
df.loc[index,"col"]=df.loc[index,"col"].cumsum()
print(df)

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