Панды: считать, когда условие выполнено в подгруппах - PullRequest
0 голосов
/ 09 октября 2018

У меня есть фрейм данных, который выглядит следующим образом:

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

Мне нужно добавить столбец, который добавляет 1, когда есть хотя бы одно значение, отличное от 0, в разных подгруппах.Обратите внимание, что если значение 1 повторяется более одного раза в одной и той же подгруппе, это не влияет на количество.Результат должен быть:

       subgroup  value   count
0         1      0        1
1         1      1        1
2         1      1        1
3         1      1        1
4         2      0        1
5         2      0        1
6         2      0        1
7         3      0        2
8         3      1        2
9         3      0        2
10        3      0        2

Заранее благодарен за помощь!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Использование merge и groupby

df.merge(df.groupby('subgroup').value.sum().gt(0).cumsum().reset_index(name='out'))

    subgroup  value  out
0          1      0    1
1          1      1    1
2          1      1    1
3          1      0    1
4          2      0    1
5          2      0    1
6          2      0    1
7          3      0    2
8          3      1    2
9          3      0    2
10         3      0    2
0 голосов
/ 09 октября 2018

Использование shift с -1 и 1 и cumsum результат

mask=(df.value.ne(df.value.shift()))&(df.value.ne(df.value.shift(-1)))
mask.cumsum()
Out[18]: 
0     1
1     1
2     1
3     1
4     1
5     1
6     1
7     1
8     2
9     2
10    2
Name: value, dtype: int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...