Как маркировать возрастающие последовательные числа на значения в столбце? - PullRequest
2 голосов
/ 31 октября 2019

У меня есть столбец, который выглядит примерно так:

1
0
0
1
0
0
0
1

Я хочу, чтобы вывод выглядел примерно так:

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

И так далее. Я не уверен, с чего начать. Там около 10000 строк, и я чувствую, что создание оператора if может занять некоторое время. Как мне добиться этого результата?

Ответы [ 6 ]

4 голосов
/ 31 октября 2019

Эффективно и кратко:

s.cumsum()*s

0    1       
1    0       
2    0       
3    2       
4    0       
5    0       
6    0       
7    3       
dtype: int64 
2 голосов
/ 31 октября 2019

Использование 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
1 голос
/ 31 октября 2019

Попробуйте это:

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
0 голосов
/ 31 октября 2019

Выберите только те строки, которые не равны нулю, и замените эти значения на cumsum

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
0 голосов
/ 31 октября 2019

вы можете сделать что-то вроде этого

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]

0 голосов
/ 31 октября 2019

np.where и cumsum:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...