Совокупное количество последовательных строк определенного значения в столбце DataFrame панд - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть этот фрейм данных, и я хочу добавить еще один столбец, который накапливается до тех пор, пока он не станет равным символу звезды *, а затем продолжить с 1, когда символ звезды появится снова.

    Star
0   *
1   *
2   *
3   *
4   s
5   s
6   *
7   *

ВыводОжидайте:

    Star  Number
0   *     1
1   *     2
2   *     3
3   *     4
4   s     NaN
5   s     NaN
6   *     1
7   *     2

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

С itertools groupby

import itertools
df['New']=sum([list(range(len(list(y)))) for _ , y in itertools.groupby(df.Star.tolist())],[])
df.loc[df.Star.ne('*'),'New']=np.nan
df.New+=1
df
Out[1152]: 
  Star  New
0    *  1.0
1    *  2.0
2    *  3.0
3    *  4.0
4    s  NaN
5    s  NaN
6    *  1.0
7    *  2.0
0 голосов
/ 06 декабря 2018

Это простая groupby и маскирующая операция.

m = df.Star.ne('*')
# Big thanks to @W-B for the bug fix!
df['Number'] = df[~m].groupby(m.cumsum()).cumcount().add(1)


df
  Star  Number
0    *     1.0
1    *     2.0
2    *     3.0
3    *     4.0
4    s     NaN
5    s     NaN
6    *     1.0
7    *     2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...