Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Проиндексировать единицы в датафрейме, но не считать нули

#python #python_3x #pandas #dataframe


Есть DataFrame, в котором записаны нули и единицы, 

df = pd.DataFrame({'A': [0,0,1,1,1,0,1]})

   A
0  0
1  0
2  1
3  1
4  1
5  0
6  1


Необходимо пронумеровать только 1, а 0 оставить без изменения, т.е. должны получить:

   A
0  0
1  0
2  1
3  2
4  3
5  0
6  1

    


Ответы

Ответ 1



In [186]: df.groupby(df['A'].diff().ne(0).cumsum()).cumsum() Out[186]: A 0 0 1 0 2 1 3 2 4 3 5 0 6 1 Пошагово: разница между текущей и предыдущей строкой: In [2]: df['A'].diff() Out[2]: 0 NaN 1 0.0 2 1.0 3 0.0 4 0.0 5 -1.0 6 1.0 Name: A, dtype: float64 сравниваем значения из шага [2] с 0: In [3]: df['A'].diff().ne(0) Out[3]: 0 True 1 False 2 True 3 False 4 False 5 True 6 True Name: A, dtype: bool кумулятивно суммируем то что получилось на предыдущем шаге [3] (в Python - False == 0, True == 1): In [4]: df['A'].diff().ne(0).cumsum() Out[4]: 0 1 1 1 2 2 3 2 4 2 5 3 6 4 Name: A, dtype: int32 дальше группируем по значениям из шага [4] и считаем кумулятивную сумму: In [8]: df.groupby(df['A'].diff().ne(0).cumsum()).cumsum() Out[8]: A 0 0 1 0 2 1 3 2 4 3 5 0 6 1

Комментариев нет:

Отправить комментарий